-
Notifications
You must be signed in to change notification settings - Fork 0
/
permutation-string.go
57 lines (49 loc) · 1.31 KB
/
permutation-string.go
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*package main
import (
"fmt"
)
func join(ins []rune, c rune) (result []string) {
for i := 0; i <= len(ins); i++ {
result = append(result, string(ins[:i])+string(c)+string(ins[i:]))
}
return
}
func permutations(testStr string) []string {
var n func(testStr []rune, p []string) []string
n = func(testStr []rune, p []string) []string{
if len(testStr) == 0 {
return p
}else {
result := []string{}
for _, e := range p {
result = append(result, join([]rune(e), testStr[0])...)
}
return n(testStr[1:], result)
}
}
output := []rune(testStr)
return n(output[1:], []string{string(output[0])})
}
func main() {
d := permutations("ABCD")
fmt.Println(d)
}
*/
package main
import "fmt"
func main() {
data := "Abcd"
dataRune := []rune(data)
generatePermutation(dataRune, 0, len(dataRune)-1)
}
func generatePermutation(dataRune []rune, left, right int) {
if left == right {
fmt.Println(string(dataRune))
} else {
for i := left; i <= right; i++ {
dataRune[left], dataRune[i] = dataRune[i], dataRune[left]
generatePermutation(dataRune, left+1, right)
dataRune[left], dataRune[i] = dataRune[i], dataRune[left]
}
}
}