题解 | #牛棚分组#
牛棚分组
https://www.nowcoder.com/practice/d5740e4dde3740828491236c53737af4
考察知识点:回溯
题目分析:
因为答案是按照升序排序,并且是组合方案,那么分组中的第一个数就是1 ~ n - k + 1。以此作为递归的入口,我们只需要看能够与后面几个数一起组合成k个数即可。当group内放入了k个数,说明找到了一组,将其加入结果中即可。
所用编程语言:C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param k int整型
* @return int整型vector<vector<>>
*/
void dfs(int n, int k, int start, vector<int> &group, vector<vector<int>> &res) {
int size = group.size();
if (size == k) {
res.push_back(group);
return;
}
for (int i = start; i <= n; i++) {
group.push_back(i);
dfs(n, k, i + 1, group, res);
group.pop_back();
}
}
vector<vector<int> > combine(int n, int k) {
// write code here
vector<vector<int>> res;
vector<int> group;
for (int i = 1; i <= n - k + 1; i++) {
group.push_back(i);
dfs(n, k, i + 1, group, res);
group.pop_back();
}
return res;
}
};
查看20道真题和解析