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
}
博客进入回溯章节,指出组合和排列是典型回溯问题。以77组合为例,强调用Go语言处理时,切片是引用类型,传递值时最好先copy。如将path切片压入,后续改动path会影响前面,需copy成tmp再压入。
355

被折叠的 条评论
为什么被折叠?



