golang上提了两次issue直接被秒关,大佬们看看这段代码的输出能不能符合你们的预期,是编译器问题吗
func main() {
subsets([]int{9, 0, 3, 5, 7})
}
func subsets(nums []int) (res [][]int) {
res = append(res, []int{})
for _, v := range nums {
for _, r := range res {
s := append(r, v)
res = append(res, s)
}
}
return
}
我的在遍历到7的时候就会出现问题
[[] [9] [0] [9 0] [3] [9 3] [0 3] [9 0 3] [5] [9 5] [0 5] [9 0 5] [3 5] [9 3 5] [0 3 5] [9 0 3 5]]
[]
[9]
[0]
[9 0]
[3]
[9 3]
[0 3]
[9 0 3]
[5]
[9 5]
[0 5]
[9 0 5]
[3 5]
[9 3 5]
[0 3 5]
[9 0 3 7]
有疑问加站长微信联系(非本文作者)

你需要了解下append的用法……
再看了下代码,你还需要知道slice到底是什么,和array的关系
嗯,我知道原因了,我以为forrange会重新分配变量的,这个地方我在理解一下
....
问题不在for range啊
slice本身是个模拟出来的类型。
它代表的是array的一部分,array中指定的一块。
大概是 slice所属的array,slice对应的开始下标,slice对应的结束下标
cap本质就是array的最大范围
append做的是将slice 的下标向后移动若干位并插入数据。
如果cap不足(array不够大),那么就创建一个一个新的array,并将slice所属的array/下开始下标/结束下标转过去。
所以,append正常情况下,只能将append的值设到append的第一个参数上。不然一旦发生数据迁移,就会出问题。
range 是一开始就决定了range 多少次的,不会管你啥变量
楼上已经解释很清楚了, 和range没关系. 怎么还扯range... 还是机器人回答帖子AI的算法需要提高一下了.
这样说,学习了,大佬,那怎么定义cap不足,array不够大呢
哦 原来是真人, 我觉得没必要考虑那么多cap不足啥的, 会自动扩容的
make slice的时候可以指定cap
make([]byte,5,10) 这样。
不然就会自动扩容,记得是每次不足扩容一倍。
容量超过2048也是扩一倍么
https://www.jianshu.com/p/54be5b08a21c
扩容多少并没有写在spec里,这个应该是看具体实现的。
能具体解释一下吗 扩容之后呢 为啥会多个7
就这个问题,我做了一些总结,https://studygolang.com/articles/33108?fr=sidebar
看到了 能睡个好觉了 多谢