题目

思路
题目的意思是给定两个整数n和k,返回数组[1……n]中所有可能的k个数的组合,那么我们可以画出树形图:

从树形结构中我们可以知道,到达叶节点的条件就是树的高度等于k,每次我们都从选取节点的后面数组进行选择,这样能防止重复问题,相关代码如下:
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> combine(int n, int k) {
if (n < k)return res;
vector<bool> used(n, false);
search(n, 0, k, 1);
return res;
}
void search(int n,int start, int k, int left) {
if (start == k) {
res.push_back(path);
return;
}
for (int i = left; i <= n; i++) {
path.push_back(i);
search(n, start + 1, k, i+1);
path.pop_back();
}
}
};
本文深入解析了组合生成算法,通过树形结构展示了如何从数组[1...n]中找到所有可能的k个数的组合。文章详细介绍了递归搜索过程,避免了重复问题,并提供了清晰的代码实现。
6240

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



