当我使用golang';s append函数创建二维切片时,切片中的上一个值将更改
这是我的密码:当我使用golang';s append函数创建二维切片时,切片中的上一个值将更改,go,Go,这是我的密码: 包src func子集(nums[]int)[]int{ var set=make([]int,0) var t=make([]整数,0) 集合=附加(集合,t) 对于i:=0;i
包src
func子集(nums[]int)[]int{
var set=make([]int,0)
var t=make([]整数,0)
集合=附加(集合,t)
对于i:=0;i
测试数据为[]int{1,2,3,4,5}我调试它。发现: 当计算集合[22]时,集合[15]从[]int{1,2,3,4}变为[]int{1,2,3,5}
发生了什么。问题是
的元素设置了类似于同一片的引用
最好为集合
的每个元素创建一个新切片。追加不会创建新切片
下面是一个修复程序,它复制了集合
的上一个向量,而不是简单地扩展它
package src
func Subsets(nums []int) [][]int {
var sets = make([][]int, 0)
var t = make([]int, 0)
sets = append(sets, t)
for i := 0; i < len(nums); i++ {
for _, v := range sets {
t = append([]int(nil), v...) // t is copy of v
t = append(t, nums[i])
sets = append(sets, t)
}
}
return sets
}
包src
func子集(nums[]int)[]int{
var set=make([]int,0)
var t=make([]整数,0)
集合=附加(集合,t)
对于i:=0;i
此处测试: