给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和
为 target 的组合。candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括 target)都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入:candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ]
完整代码:
/**
* @param {number[]} nums
* @return {number}
*/
var combinationSum = function(candidates, target) {
// 升序
let arr = candidates.sort((m, n)=> m - n);
let res = [];
function def(nums, target, path) {
for (let i = 0; i < nums.length;i++) {
let curPath = [...path, nums[i]];
let curTarget = target - nums[i];
if (curTarget === 0) {
res.push(curPath);
} else if (curTarget >= nums[0]){
def(nums.slice(i), curTarget, curPath);
}
}
}
def(arr, target, []);
return res;
};