class Solution {
public:
vector<vector<int>>res;
//求解C(n,k),当前已经找到的组合存储在c中,需要从start开始搜索新的元素
void generateCombinations(int n,int k,int start,vector<int> &c){
if(c.size()==k){
//如果找到了一个组合,就将其存储在结果res中
res.push_back(c);//递归终止
return ;
}
//回溯算法递归过程
for(int i=start;i<=n;i++)
{
c.push_back(i);
generateCombinations(n,k,i+1,c);//递归调用
//回溯
c.pop_back();
}
return;
}
vector<vector<int>> combine(int n, int k) {
res.clear();
if(n<=0||k<=0||k>n){
return res;
}
vector<int>c;//存储临时的生成的组合
generateCombinations(n,k,1,c);
return res;
}
};
LeetCode:77.组合
最新推荐文章于 2025-06-23 17:02:42 发布
本文介绍了一种使用C++实现的回溯算法,用于生成所有可能的组合C(n,k)。通过递归调用和回溯操作,算法能够有效地找出所有长度为k的组合,这些组合由范围1到n的整数构成。
538

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



