难度中等1307收藏分享切换为英文接收动态反馈
    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
    candidates 中的数字可以无限制重复被选取。
    说明:

    • 所有数字(包括 target)都是正整数。
    • 解集不能包含重复的组合。

    示例 1:
    输入:candidates = [2,3,6,7], target = 7,
    所求解集为:
    [
    [7],
    [2,2,3]
    ]

    示例 2:
    输入:candidates = [2,3,5], target = 8,
    所求解集为:
    [
    [2,2,2,2],
    [2,3,3],
    [3,5]
    ]

    1. function getSum(arr) {
    2. return arr.length === 0 ? 0 : arr.reduce((a, b) => a + b)
    3. }
    4. var combinationSum = function (candidates, target) {
    5. var res = []
    6. function backtracking(path,start) {
    7. const sum = getSum(path)
    8. if (sum > target) return
    9. if (sum === target) {
    10. res.push([...path])
    11. return
    12. }
    13. for (let index = start; index < candidates.length; index++) {
    14. const element = candidates[index];
    15. path.push(element)
    16. backtracking(path,index) // index不用加1 就可以重复使用数字了
    17. path.pop()
    18. }
    19. }
    20. backtracking([],0)
    21. return res
    22. };
    23. combinationSum([2, 3, 6, 7], 7)