Combination Sum


Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target. The same repeated number may be chosen from candidates unlimited number of times. Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations.

Example 1: Input: candidates = [2,3,6,7], target = 7, A solution set is:

[
  [7],
  [2,2,3]
]
Example 2: Input: candidates = [2,3,5], target = 8, A solution set is:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]
Solution
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */

var combinationSum = function(candidates, target) {
    var options = [];
    var recurse = function(numbers=[], sum=0, index=0) {
        for(let i=index; i<candidates.length; i++) {
            let candidate = candidates[i];
            if (sum + candidate === target) {
                options.push(numbers.concat(candidate));
            } else if (sum + candidate < target) {
                numbers.push(candidate)
                recurse(numbers, sum + candidate, i);
                numbers.pop();
            }
        }
    }
    recurse();
    return options;
};