go组合

package main

import "fmt"

func main() {

	aa := []string{"a", "b", "c", "d"}
	fmt.Println(permutation(aa))
}

func permutation(sarr []string) (rets []string) {

	if len(sarr) == 1 {
		rets = sarr
		return rets
	}
	for i := 0; i < len(sarr); i++ {
		// append(sarr[:i], sarr[i+1:]...)直接append会改变sarr
		sonsarr := permutation(append(append([]string{}, sarr[:i]...), sarr[i+1:]...))

		for _, sons := range sonsarr {
			rets = append(rets, sarr[i]+sons)
		}
	}
	return rets
}
原文地址:https://www.cnblogs.com/wahgon/p/15480766.html