在labuladong公众号看到一篇回溯法的模板,通过遍历决策树暴力递归。感觉比较简单直观,遂用golang试着写了一个全排列。
package main
import(
"fmt"
)
func main(){
nums := []int{1,2,3}
var list List
traceBack(nums, list)
fmt.Println(res)
}
var res [][]int
type List []int
func (l *List) contains(x int)bool{
for _, v := range *l{
if v == x {
return true
}
}
return false
}
func (l *List) pop(){
length := len(*l)
*l = append((*l)[:length-1])
}
func traceBack(nums []int, list List) {
if (cap(nums) == len(list)){
res = append(res, list)
return
}
for _, v := range nums{
if list.contains(v){
continue
}
list = append(list, v)
traceBack(nums, list)
list.pop()
}
}