在网上找了一段代码,但是输入英文字符可用,输入中文就不好用了
比如我想排列的字符串是:高中低,预期结果为:高高高、高低中、高低低....类似,把所有情况都打印出来
然后自己改了下,没改出来,不知道怎么弄了,附原代码和我改的代码:
原代码:
```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
}
```
我改的代码:
```go
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
}
```
不知道这个是不是你想要的
```
package main
import "fmt"
func backtracking(s []rune, i int, seq string, res *[]string) {
if i == len(s) {
*res = append(*res, seq)
return
}
for j := 0; j < len(s); j++ {
backtracking(s, i+1, seq+string(s[j]), res)
}
}
func main() {
s := "高中低"
data := []rune(s)
res := []string{}
backtracking(data, 0, "", &res)
fmt.Println(res)
}
```
#2
更多评论
```go
func permutation(S string) []string {
nameRune := []rune(S)
if len(nameRune) == 1 {
return []string{S}
}
// 与拼接得到的各个字符串再进行拼接
ret := []string{}
for i, s := range nameRune {
// 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并
tmp := string(nameRune[:i]) + string(nameRune[i+1:])
res := permutation(tmp)
for _, r := range res {
ret = append(ret, fmt.Sprintf("%c%s", s, r))
}
}
return ret
}
```
#1