数字组合

使用递归和深搜方法解决寻找数字组合的问题,允许候选数字无限制重复选取。例如,对于候选数组[2,3,6,7]和目标数字7,返回组合[[7],[2,2,3]]。此问题采用回溯法,当数字组合超过目标时进行剪枝,以优化搜索效率。问题与组合问题本质相同,通过辅助函数helper进行处理,该函数根据当前路径、起始位置、结果集、目标和候选数字列表进行操作。" 83000750,6903533,JVM 类加载器源码深度解析,"['JVM', '类加载器']
摘要由CSDN通过智能技术生成

题目描述:给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:[7],[2,2,3]

样例:给出候选数组[2,3,6,7]和目标数字7,返回 [[7],[2,2,3]]


跟问题“组合”(详见:点击打开链接)从本质上讲是一样的,都是“深搜” + “递归”的方法。只不过这个问题看上去要更难一些,因为允许有重复,且每一种数字组合的个数不一定相等。说的专业一点,我们应该把此类问题成为“回溯法”,和之前最大的区别,就是这里数字组合的问题需要用到“剪枝”的方法,所谓“剪枝”,其实就是当现在的情况已经不可能完成目标时,返回父节点(比如,这个问题中,当某一时刻的数字组合已经大于目标数字,我们就回溯,而不一定只是等于目标元素时,才回溯)。

不过我本人一向不喜欢把问题的方法归纳的太细,因为记不住嘛。所以我并不把这个问题和前面的组合分开,我依然认为他们是同一类问题。方法也是类似的,还是需要一个辅助函数helper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值