题意:
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
- 所有数字都是正整数。
- 解集不能包含重复的组合。
解题思路:
dfs深度搜索就行,做好限制条件
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void dfs(int k, int n, int index, int sum) {
int cnt = path.size();
if(cnt > k || sum > n || index > 10) {
return ;
}
if(cnt == k && sum == n) {
ans.push_back(path);
return ;
}
for(int i = index; i <= 9; i++) {
sum += i;
path.push_back(i);
dfs(k, n, i+1, sum);
sum -= i;
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
dfs(k, n, 1, 0);
return ans;
}
};