go實現全排列:
不可重複:
package main
import (
"fmt"
"strings"
)
func main() {
res := make([]string, 0)
c := []string{"a", "b", "c", "d", "e"}
s := make([]string, 0)
run(&res, c, s)
fmt.Println(res)
}
func run(res *[]string, c []string, s []string) {
if len(s) == 4 {
*res = append(*res, strings.Join(s, ""))
return
}
for i := 0; i < len(c); i++ {
//傳入s的副本
ns := append(s[:0:0], s...)
ns = append(ns, c[i])
//傳入c的副本
nc := append(c[:0:0], c...)
nc = append(nc[:i], nc[i+1:]...)
run(res, nc, ns)
}
}
可重複:
package main
import (
"fmt"
"strings"
)
func main() {
res := make([]string, 0)
c := []string{"a", "b", "c", "d", "e"}
s := make([]string, 0)
run(&res, c, s)
fmt.Println(res)
}
func run(res *[]string, c []string, s []string) {
if len(s) == 4 {
*res = append(*res, strings.Join(s, ""))
return
}
for i := 0; i < len(c); i++ {
ns := append(s[:0:0], s...)
ns = append(ns, c[i])
// nc := append(c[:0:0], c...)
// nc = append(nc[:i], nc[i+1:]...)
run(res, c, ns)
}
}