今天开始回溯算法,回溯算法用于组合,分割,子集,排列,棋盘问题等。所有回溯法的问题都可以抽象为树形结构。
回溯三部曲为:1.确定返回值 2.确定终止条件 3.确定单层逻辑
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
void backtracing(int n,int k,int startInderx){
if(path.size()==k){
result.push_back(path);
return;
}
for(int i=startInderx;i<=n;i++){
path.push_back(i);
backtracing(n,k,i+1);
path.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtracing(n,k,1);
return result;
}
};