1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| // @Title: 字符串的排列 (字符串的排列 LCOF)
// @Author: 15816537946@163.com
// @Date: 2022-03-03 10:09:51
// @Runtime: 32 ms
// @Memory: 7.5 MB
func permutation(s string) (ans []string) {
t := []byte(s)
sort.Slice(t, func(i, j int) bool { return t[i] < t[j] })
n := len(t)
perm := make([]byte, 0, n)
vis := make([]bool, n)
var backtrack func(int)
backtrack = func(i int) {
if i == n {
ans = append(ans, string(perm))
return
}
for j, b := range vis {
if b || j > 0 && !vis[j-1] && t[j-1] == t[j] {
continue
}
vis[j] = true
perm = append(perm, t[j])
backtrack(i + 1)
perm = perm[:len(perm)-1]
vis[j] = false
}
}
backtrack(0)
return
}
|