golang 二维 slice 的奇怪 bug

对二维 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]
发布了295 篇原创文章 · 获赞 158 · 访问量 101万+

猜你喜欢

转载自blog.csdn.net/kikajack/article/details/104685344
今日推荐