这是我的代码:
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(v, nums[i])
sets = append(sets, t) }
}
return sets
}
测试数据为[] int {1,2,3,4,5}我调试它。发现:
[计算集合[22]时,集合[15]从[] int {1,2,3,4}更改为[] int {1,2,3,5}
发生了什么。
问题是sets
类的元素引用同一切片。
您最好为sets
的每个元素创建一个新切片。追加不会创建新的切片。
这里是一个修复程序,它复制sets
的先前向量而不是简单地对其进行扩展。
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
}