77 组合
正式进入了回溯的章节,最典型的回溯问题就是组合和排列问题了,但是用go需要注意的是,切片其实是一个引用 的类型,想要传递值的时候最好用copy一下再传递。例如本来想将path切片压入,但是如果后序对path进行改动的时候会导致前面也进行了改动,所以需要copy一个tmp压入。
tmp := make([]int, k)
copy(tmp, path)
ret = append(ret, tmp)
func combine(n int, k int) [][]int {
ret := make([][]int, 0)
path := make([]int, 0)
var getpath func(int)
getpath = func(start int) {
if len(path) == k{
tmp := make([]int, k)
copy(tmp, path)
ret = append(ret, tmp)
return
}
for i := start; i <=n; i++{
path = append(path, i)
getpath(i + 1)
path = path[:len(path) - 1]
}
}
getpath( 1)
return ret
}