一:题目
二:思路
1.总体来看这是一个解空间为k层的排列树 第一层为1~9
2.递归函数的参数和返回值
1>:返回值:vector<vector > res
每次的求解结果:vector path
2>:参数:
backtacking(int k,int n,int index,int sum)
这里需要的index是 因为我们每次往下递归的时候 我们的返回在 缩小
3.递归函数的终止条件为
k == path.size(),这里可能使 结果并不满足 n == sum 但也要结束递归,寻找下一个可行解即可
4.横向单层的for循环的为(1~9),纵向为递归的k层
三:上码
class Solution {
public:vector<vector<int> > ans;vector<int> path;void backtacking(int k,int n,int index,int sum){if (path.size()== k) {if (n == sum) ans.push_back(path);return;//如果 path.size() == k 而 n != sum 直接结束本次循环 }for (int i = index; i <= 9; i++) {sum += i;path.push_back(i);backtacking(k,n,i+1,sum);path.pop_back();//sum -= i;//注意的是每次往上回溯的时候我们都需要将上一层存进去的剪掉,为其他可行解提供空间}}vector<vector<int>> combinationSum3(int k, int n) {/*思路:1.总体来看这是一个解空间为k层的排列树 第一层为1~92.递归函数的参数和返回值1>:返回值:vector<vector<int> > res每次的求解结果:vector<int> path2>:参数:backtacking(int k,int n,int index,int sum)这里需要的index是 因为我们每次往下递归的时候 我们的返回在 缩小3.递归函数的终止条件为k == path.size(),这里可能使 结果并不满足 n == sum 但也要结束递归,寻找下一个可行解即可4.横向单层的for循环的为(1~9),纵向为递归的k层 */backtacking(k,n,1,0);return ans;}
};