39.组合总和

这道题有点,,让我挺懵的,倒不是这道题本身的原因,而是golang的原因。。。

 

这道题是用回溯来解决的,假如不是无限制重复选取一个数相信会更简单一些,就直接回溯就行,每次添加一个数,target就减去这个数,直到target为0时,得到的数组结果就是一个集合,添加进结果中。如果小于0,直接返回。但是这道题是可以重复选择同一个数的,所以,回溯进去后不是从下一个数开始,而是还是当前的数,这里要注意的是一个回溯结束后,上一步的循环要把这个数从nums中移出去

代码如下:

比较有意思的是最后的结果append到res中时必须是新生命一个slice,然后把nums的值给copy过来,我也不知道这是咋回事。。应该是golang的某个陷阱把。。不然就是错的。。有点懵逼。。

 

回溯的nums添加元素去除元素其实可以直接写成这样更方便,感觉也更好理解:

 

 

java版:

    被一个知识点给折磨了半小时,List的remove方法时也就是list.remove(),里面的参数不是实际是元素,而是下标!!!,我居然把这个给搞混了,我也是服了哇

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值