這是我的代碼: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 關注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消