go筆記-----go實現全排列的模板

 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)
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章