回溯
一、组合
1.当k值很小的时候,暴力循环可以解决,k值很大的时候,就不能用暴力循环
2.n决定遍历的宽度,k决定遍历的深度,有几层循环就有几层递归
3.回溯位于递归下面,用来撤销本次处理的结果,返回到上一层,再次执行递归
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 = 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;
}
};
总结
回溯与递归紧密链接,有回溯就有递归,用来撤销本次处理的结果,返回到上一层
学习时间90min。
学习资料:《代码随想录》。