这是我的代码:package srcfunc 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}我调试它。发现:计算sets[22]时,sets[15]由[]int{1,2,3,4}变为[]int{1,2,3,5}发生了什么。
1 回答
哔哔one
TA贡献1854条经验 获得超8个赞
问题在于,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
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消