题解 | #牛棚分组#

牛棚分组

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;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务