思路
还是利用回溯,取出和放回
代码
class Solution {
public:vector<int> path;int curSum;vector<vector<int>> result;void backtracking(int k, int n, int startIndex) {if (curSum > n || path.size() > k) {return;}if (curSum == n && path.size() == k) {result.push_back(path);}// i <= path.size() + 10 - k// i <= 9 - (k - path.size() ) + 1for (int i = startIndex; i <= 9; i++) {if (path.size() + 9 - startIndex + 1 < k)break;path.push_back(i);curSum += i;backtracking(k, n, i + 1);curSum -= i;path.pop_back();}}vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 1);return result;}
};