LeetCode combinations

题目描述

给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合

例如:

如果n=4,k=2,结果为

[↵  [2,4],↵  [3,4],↵  [2,3],↵  [1,2],↵  [1,3],↵  [1,4],↵]

解题思路

class Solution {
public:
    vector<vector<int> > combine(int n, int k) {
        vector<vector<int> > res;
        vector<int> ans;
        dfs(1, n, k, res, ans);
        return res;
    }
    
    void dfs(int num, int n, int k, vector<vector<int> > &res, vector<int> &ans){
        if( k == 0){   //k==0就不用再选了
            res.push_back(ans);
            return;
        } 
        if(num > n)   //num>n不符合要求
            return;
        ans.push_back(num);   //选中该数
        dfs(num+1, n, k - 1, res, ans);  //从num+1到n中取k-1个数
        ans.pop_back();          //将该数退出
        dfs(num+1, n, k, res, ans);  //从num+1到n中取k个数
    }
};
发布了169 篇原创文章 · 获赞 9 · 访问量 4822

猜你喜欢

转载自blog.csdn.net/weixin_41317766/article/details/102549370