Go 追加到[][]整数切片时出现错误结果-组合和问题

Go 追加到[][]整数切片时出现错误结果-组合和问题,go,Go,当我附加到[][]int类型的切片时,结果不是我所期望的。我有下面的代码说明了这个问题,并有一个修复程序。但我想知道到底发生了什么 运行代码位于 坏掉的那一个在 这是因为leetcode问题 有人能解释一下到底发生了什么事吗?我相信这与备份阵列的重用有关。。但我真的不明白 提前谢谢 问题代码 如果目标==0{ fmt.Println(“当前结果:”,当前结果) fmt.Println(“结果之前:”,结果) r:=追加([]int{},currResult…) fmt.Println(“r=”

当我附加到[][]int类型的切片时,结果不是我所期望的。我有下面的代码说明了这个问题,并有一个修复程序。但我想知道到底发生了什么

运行代码位于 坏掉的那一个在

这是因为leetcode问题

有人能解释一下到底发生了什么事吗?我相信这与备份阵列的重用有关。。但我真的不明白

提前谢谢

问题代码

如果目标==0{
fmt.Println(“当前结果:”,当前结果)
fmt.Println(“结果之前:”,结果)
r:=追加([]int{},currResult…)
fmt.Println(“r=”,r)
//*结果=追加(*结果,r)
//若你们取消了行上的注释和行下的注释,你们会得到正确的结果——为什么?
*结果=追加(*结果,当前结果)
fmt.Println(“结果:,*结果)
返回
}
工作代码

主程序包
进口(
“fmt”
)
导入“排序”
函数组合和(候选项[]整数,目标整数)[]整数{
sort.int(候选)
结果:=[]int{}
助手(候选对象、目标、0、[]int{}、&result)
返回结果
}
func助手(候选项[]int、目标int、位置int、当前结果[]int、结果*[]int){
如果pos==len(候选者)| |目标<0{
返回
}
如果目标==0{
fmt.Println(“当前结果:”,当前结果)
fmt.Println(“结果之前:”,结果)
r:=追加([]int{},currResult…)
fmt.Println(“r=”,r)
*结果=追加(*结果,r)
//若你们在上面注释,在下面取消注释,你们会得到错误的结果——为什么?
//*结果=追加(*结果,当前结果)
fmt.Println(“结果:,*结果)
返回
}
//让我们看看是否可以优化此调用
对于i:=pos;i
工作的代码将
currResult
s后备数组复制到结果中。不起作用的代码在结果和正在进行的计算之间共享支持数组。谢谢。。由于调用方更新了共享的数组,并且它只指向数组的最新副本。。。