思路
- 无需去重——无需排序
- 剪枝——当前路径的最大深度需大于等于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;
}
};
本文探讨了一种使用深度优先搜索(DFS)和回溯法解决组合问题的算法。该算法在不重复和不排序的情况下,找到所有可能的组合。通过递归和剪枝策略,确保当前路径的最大深度大于等于给定的k值,从而有效地减少搜索空间。代码中展示了如何实现这一算法,并返回所有满足条件的组合。
80

被折叠的 条评论
为什么被折叠?



