import "fmt"
func main() {
input := []int{2,3, 5}
target := 8
fmt.Println(combinationSum(input, target))
}
func combinationSum(candidates []int, target int) [][]int {
var res [][]int
var backtrack func(int, int, []int)
backtrack = func(idx int, sum int, nums []int) {
if sum == target {
res = append(res, nums)
}
if sum >= target {
return
}
for i := idx; i < len(candidates); i++ {
backtrack(i, sum + candidates[i], append(nums,candidates[i]))
}
}
backtrack(0, 0, []int{})
return res
}
这段代码结果有问题, 而且问题处在 res = append(res, nums) 这一行, 如果我把 nums copy 一个再 append 就不会有问题了,听说这里大神比较多,求大神们指教一下
1
an93 OP |
2
luguhu 2020-11-07 22:28:41 +08:00
slice 是指针传递
|
3
zhouenxian 2020-11-08 07:39:49 +08:00
函数传参数确实是值传递,但 slice 传递的值中包含了内容的地址,所以还是把地址传了进去。
如下为切片类型的内部定义。 type _slice struct { elements unsafe.Pointer // 引用着底层存储在间接部分上的元素 len int // 长度 cap int // 容量 } 引用:go 101,https://gfw.go101.org/article/container.html |