链接:https://leetcode-cn.com/problems/combination-sum-iii
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。
思路:直接套用模板,跟那个全排列有点像,还有其实就是个N叉树的前序遍历,细品。害,我这个机器人。
class Solution {
public:
vector<vector<int> > res;
void dfs(int start,int sum,int k,int n,vector<int> &path){
if(path.size()==k){ //结果只允许有k个数,也就是说控制深度
if(sum == n){ //符合条件的话,将其加入到结果集中
res.push_back(path);
}
return;
}
for(int i=start;i<10;i++){ //相当于是每一层孩子结点的个数
path.push_back(i);
sum+=i;
dfs(i+1,sum,k,n,path);//遍历孩子的孩子
path.pop_back();
sum-=i;
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> path;
dfs(1,0,k,n,path);
return res;
}
};