题目
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
思路
在上一个组合题上进一步用sum去判断终止条件
同时有双重剪枝技巧。见代码
var combinationSum3 = function(k, n) {
let res =[];
let path =[];
const backTracing =function(k,n,startindex,sum){
// 回溯循环(这里是横向循环,i的剪枝看k)
for(let i =startindex;i<=9-(k-path.length)+1;i++){
if(sum>n)return; //剪枝2,利用sum
if(path.length===k&&sum===n){
// console.log(sum);
res.push(path.slice());
// console.log(res);
return;
}
sum+=i;
// console.log(sum);
path.push(i);
backTracing(k,n,i+1,sum);
path.pop();
sum-=i; //sum也要回溯
//或者直接传入 sum+i
//backTracing(k,n,i+1, sum+i);
}
}
backTracing(k,n,1,0);
return res;
};