对二维 slice 操作时,对长度 16 的 slice 的第 8 次操作时,影响了第 16 个 slice 的最后一个元素。。
package main
import "fmt"
// import "sort"
// import "reflect"
// import "math"
// import "strings"
func showSlice(s [][]int) {
for _, v := range s {
fmt.Println(v)
}
fmt.Println()
}
func main() {
fmt.Println(subsets([]int{9,0,3,5,7}))
}
func subsets(nums []int) [][]int {
ret := [][]int{{}}
for i := 0; i < len(nums); i++ {
tmp := make([][]int, len(ret))
copy(tmp, ret)
if len(ret) == 16 {
fmt.Println(tmp[15])
}
for j := 0; j < len(tmp); j++ {
if len(ret) == 16 {
fmt.Println(j, tmp[15])
}
fmt.Println(j, tmp[j])
tmp[j] = append(tmp[j], nums[i])
fmt.Println("\t", nums[i], "~~~", tmp[j])
}
if len(ret) == 16 {
fmt.Println(tmp[15])
}
ret = append(ret, tmp...)
}
return ret
}
4 [3]
7 ~~~ [3 7]
5 [9 0 3 5]
5 [9 3]
7 ~~~ [9 3 7]
6 [9 0 3 5]
6 [0 3]
7 ~~~ [0 3 7]
7 [9 0 3 5]
7 [9 0 3]
7 ~~~ [9 0 3 7]
8 [9 0 3 7] -> 这里变化了
8 [5]
7 ~~~ [5 7]
9 [9 0 3 7]
9 [9 5]
7 ~~~ [9 5 7]
10 [9 0 3 7]