题目
找出所有相加之和为 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,利用sumif(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;};
