77. Combinations
总结回溯就是递归加上for循环并且加上pop掉最后一个元素;
另外要注意这个题数组的大小N就是树的宽度, 递归的过程就是深度;回溯方法也是个暴力枚举的方法,为了应该无数个for嵌套算不出来的情况的做法;
class Solution {
public:
vector<vector<int>> result; // 存放符合条件结果的集合
vector<int> path; // 用来存放符合条件单一结果
void backtracking(int n, int k, int startIndex){
if(path.size()==k) {
result.push_back(path);
return; //边界条件
}
//for(int i=1;i<=n;i++)这么写就没有动态的更新start index,这个strart index是通过调用backtracking函数的时候来改变的
for(int i=startIndex;i<=n;i++){
path.push_back(i);
backtracking(n,k,i+1);
path.pop_back(); //删除尾巴元素 // 回溯,撤销处理的节点
}
}
vector<vector<int>> combine(int n, int k) {
backtracking(n,k,1);
return result;
}
};