今天进入的是回溯法,这部分在acm已经学过了,其实就是dfs深搜,本质上是一样的,其次和递归函数也是一样的,递归中反映着回溯过程(二叉树部分已经很熟悉了),在dfs中,遇到最多的就是需要剪枝,这很重要,能省下很多运行时间。下面直接上剪枝后的代码:
Leetcode 77. 组合
题目链接 77 组合
class Solution {
private:
vector<int> path;
vector<vector<int>> result;
void backtracking(int n,int k,int startIndex){
if(path.size() == k){
result.push_back(path);
return ;
}
for(int i=startIndex;i<=n - (k - path.size()) + 1;i++){
//n - (k - path.size()) + 1//剪枝部分
path.push_back(i);
backtracking(n,k,i+1);
path.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtracking(n,k,1);
return result;
}
};
还要继续复习二叉树!!!