class Solution {
public:
vector<vector<int>> ans;
vector<int> combination;
vector<vector<int>> combinationSum3(int k, int n) {
for(int i = 1; i <= n / 2; ++i){
combination.push_back(i);
backtrack(k - 1, n - i, i);
combination.pop_back();
}
return ans;
}
void backtrack(int k, int n, int min){
if(k == 0){
if(n == 0) //如果个数用完了并且正好相加为原本的n,添加到答案中
ans.push_back(combination);
return;
}
for(int i = min + 1; i <= n; ++i){
if(i > 9) //组合中的数字不能超过9,也就是 i <= min(n, 9)
break;
combination.push_back(i);
backtrack(k - 1, n - i, i); //去找相加之和为n - i的k - 1个数的组合
combination.pop_back();
}
}
};
Accepted
18/18 cases passed (0 ms)
Your runtime beats 100 % of cpp submissions
Your memory usage beats 80.94 % of cpp submissions (6.2 MB)