Slice的坑

1、Slice容量不够时,再append就变成新生成的一个slice了

参见填golang slice的append的“坑” - 知乎 (zhihu.com)

2、append时结果不变

在leetcode的46题,我的代码如下

func permute(nums []int) [][]int {
    if len(nums) == 0{
        return [][]int{}
    }
    result := [][]int{}
    track := []int{}
    used := make([]bool, len(nums))
    backtrack(nums, &track, &used, &result)
    return result
}

func backtrack(nums []int, track *[]int, used *[]bool, result *[][]int){
    // 触发结束条件
    if len(*track) == len(nums){
        temp := make([]int, len(*track))
		copy(temp, *track) // 一定要copy到temp中再append,不能直接把*track append到*result中
        *result = append(*result, temp)
        return
    }

    for idx, num := range nums{
        // 排除不合法的选择
        if (*used)[idx]{
            continue // nums[idx]已经做过选择
        }
        // 做选择
        *track = append(*track, num)
        (*used)[idx] = true
        // 进入下一层决策树
        backtrack(nums, track, used, result)
        // 撤销选择
        *track = (*track)[:len(*track)-1]
        (*used)[idx] = false
    }
    return
}

 在这段代码中

 我的本意是将*track append到*result中,但是直接append结果不对,result不变,然而copy一遍后再append到*result的话就对了,所以显然不是第一条slice的容量的坑,目前还没发现原因,夜已深,后面找到原因了再填坑

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值