var combinationSum = function (candidates, target) {
candidates.sort((a,b)=>{return b-a})
let len = candidates.length
let min = candidates[len-1];
let res=[];
let path =[];
function combin(candidates,target,i,path) {
if(target == 0){
return res.push(path.slice())
}
if(target < min){
return;
}
for(let start =i;start < len ;start++){
path.push(candidates[start])
combin(candidates,target-candidates[start],start,path)
path.pop()
}
}
combin(candidates,target,0,path);
return res;
};
剪枝的算法参考这个图