这是我的代码:
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
}
此处测试:https://play.golang.org/p/OZ9nN_t3w9D