leetcode39-组合总和

leetcode 39
在这里插入图片描述

思路

本题和组合总和III非常相似,可以参考这篇博文:组合总和III,这里的区别就是,组合总和III中每个数只能使用一次,而本题中每个数可以重复使用,对于这一点,我们在下次递归的时候传入的就应该是i而不是i+1,因为i就是下一次也从当前数开始计算,这样可以对一个数字重复使用
另外组合总和III中对path有个数限制,而本题没有,所以最终只要sum和target相等就可以作为答案值,当sum的值已经大于target时,我们做剪枝

实现

var combinationSum = function (candidates, target) {
    let result = [], path = [], sum = 0;
    const backtracking = (candidates, target, startIndex) => {
        if (sum === target) {
            result.push([...path])
            return
        }
        if (sum > target) return
        for (let i = startIndex; i < candidates.length; i++) {
            sum += candidates[i];
            path.push(candidates[i])
            backtracking(candidates, target, i)
            sum -= path.pop()
        }
    }
    backtracking(candidates, target, 0)
    return result;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值