這是我的代碼: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}測試數(shù)據(jù)是[]int{1,2,3,4,5}我調(diào)試它。發(fā)現(xiàn):計算sets[22]時,sets[15]由[]int{1,2,3,4}變?yōu)閇]int{1,2,3,5}發(fā)生了什么。
1 回答

嗶嗶one
TA貢獻1854條經(jīng)驗 獲得超8個贊
問題在于,sets類型的元素引用同一個切片。
您最好為 的每個元素創(chuàng)建一個新切片sets。追加不會創(chuàng)建新切片。
這是一個修復(fù)程序,它復(fù)制先前的向量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 關(guān)注
- 196 瀏覽
添加回答
舉報
0/150
提交
取消