思路
- 无需去重——无需排序
- 剪枝——当前路径的最大深度需大于等于k
- 不变的参数 使用 引用参数
代码
class Solution {
vector<vector<int>> ans;
vector<int> path;
void backtracing(int& n,int& k,int idx){
//递归终止条件
if(path.size()==k){
ans.emplace_back(path);
return;
}
//单层搜索逻辑 剪枝——当前路径的最大深度要大于等于k
for(int i=idx;i<=n&&k<=(n+1-idx)+path.size();++i){
path.emplace_back(i);
backtracing(n,k,i+1);
path.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtracing(n,k,1);
return ans;
}
};