找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回
思路:回溯,在1-9循环中递归即可,递归的出口条件是答案数组中数字之和等于k
class Solution {
public:
vector<vector<int>> ans_sum;
vector<int> ans;
int sum=0;
void find(int n,int k,int start)
{
if(ans.size()==k)
{
if(sum==n)
ans_sum.push_back(ans);
return;
}
for(int i=start;i<=9;i++)
{
sum+=i;
ans.push_back(i);
find(n,k,i+1);
ans.pop_back();
sum-=i;
}
}
public:
vector<vector<int>> combinationSum3(int k, int n) {
find(n,k,1);
return ans_sum;
}
};