GoLang里怎么对一个中文字符串进行排列组合?

有一个字符串,比如 “低中高”
想用go实现这个字符串里的三个汉字的所有排列组合情况
网上找了一段代码,但只能传英文字符串
自己改了下代码也没改出来,一跑直接电脑卡死了。。

网上的代码:

func permutation(S string) []string {
    if len(S) == 1 {
        return []string{S}
    }
    // 与拼接得到的各个字符串再进行拼接
    ret := []string{}
    for i, s := range S {
        // 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并
        tmp := fmt.Sprintf("%s%s", S[:i], S[i+1:])
        res := permutation(tmp)
        for _, r := range res {
            ret = append(ret, fmt.Sprintf("%c%s", s, r))
        }
    }
    return ret
}

我改的代码:

func permutation(S string) []rune {
   nameRune := []rune(S)
   if len(nameRune) == 1 {
      return nameRune
   }
   // 与拼接得到的各个字符串再进行拼接
 ret := []rune{}
   for i, s := range nameRune {
      // 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并
 tmp := fmt.Sprintf("%c%c", nameRune[:i], nameRune[i+1:])
      res := permutation(tmp)
      for _, r := range res {
         ret = append(ret, s, r)
      }
   }
   return ret
}
阅读 3.3k
2 个回答

排列组合,中文字符rune类型处理
image.png

func main() {
    fmt.Printf("%+vn", permutation("高中低"))
}
func permutation(S string) []string {
    nameRune := []rune(S)
    var ret []string
    if len(nameRune) == 1 {
        ret = append(ret, string(nameRune))
        return ret
    }
    // 与拼接得到的各个字符串再进行拼接
    for i, s := range nameRune {
        // 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并
        var t []rune
        t = append(t, nameRune[:i]...)
        t = append(t, nameRune[i+1:]...)
        res := permutation(string(t))
        for _, r := range res {
            ret = append(ret, fmt.Sprintf("%s%s", string(s), r))
        }
    }
    return ret
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题