回溯模板:
(1)递归函数的参数和返回值;
(2)确定终止条件;
(3)单层递归逻辑;
回溯法可抽象为一个n叉树。
77. 组合
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) {
result.clear();
path.clear();
backtracking(n, k, 1);
return result;
}
};