我错过了一些关于切片的基本内容,导致我的结果最终看起来很奇怪。
是的,这是来自利特代码的问题。我用它来学习围棋,因为我发现用新语言解决算法对我很有帮助。我不需要算法的答案,也不需要知道如何修复算法。我只想知道为什么当我附加另一个值时,我的附加值会发生变化。
首先,这是我的代码:
type node struct {
value int
children []*node
}
func combinationSum(candidates []int, target int) [][]int {
var output [][]int
var acc []int
combinationSum2(candidates, &output, target, acc, 0)
return output
}
func combinationSum2(candidates []int, output *[][]int, target int, acc []int, sum int) {
if(sum == target) {
fmt.Println(acc)
*output = append(*output, acc)
fmt.Println(output)
return
}
if(sum > target) {
return
}
for i := 0; i < len(candidates); i++ {
combinationSum2(candidates[i:], output, target, append(acc, candidates[i]), sum + candidates[i])
}
}
我正在测试这个代码,候选者=[2,3,5]和目标=8
正确的输出应该是[[2,2,2,2],[2,3,3],[3,5]];但是,我的代码返回 [[2,2,2,5],[2,3,3],[3,5]]
有趣的是,当我记录if语句中的 acc 值和追加 acc 值后的输出时,似乎我追加的值在追加第二个数组后发生了变化。
acc = [2 2 2 2]
output = &[[2 2 2 2]]
acc = [2 3 3]
output = &[[2 2 2 5] [2 3 3]]
acc = [3 5]
output = &[[2 2 2 5] [2 3 3] [3 5]]
我尝试在本地运行它,并得到同样的奇怪行为。这是什么原因造成的?
潇湘沐
相关分类