这是我的代码: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 回答
绝地无双
TA贡献1946条经验 获得超4个赞
问题是setskind 的元素引用了同一个 slice。
您最好为 的每个元素创建一个新切片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 关注
- 97 浏览
添加回答
举报
0/150
提交
取消