题目
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。
candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
示例
输入: candidates =[2,3,6,7],
target =7
输出: [[7],[2,2,3]]
思路
index是为了防止重复的,比如数组是 2 2 2 3
但是如果一开始进入3 也会找到3 2 2 2
这个时候判断一下 对candidates假设为[2,3,6,7]进入2的分支可以进入3,但是进入3的分支不能进入3以前的只能进入6 7 这种三以后的.
答案
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function(candidates, target) {
let ans=[];
let path=[];
function dfs(curTarget,index){
if(curTarget===0){
let temp=[...path]
ans.push(temp);
}
if(curTarget<0){
return ;
}
for(let i=index;i<candidates.length;i++){
curTarget-=candidates[i];
path.push(candidates[i]);
dfs(curTarget,i);
curTarget+=candidates[i];
path.pop();
}
}
dfs(target,0);
return ans;
};