LeetCode 77.组合

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

算法:基础的dfs题目。我们在枚举的时候可以考虑选和不选两种情况即可。

class Solution {
public:
    vector<vector<int>>res;
    void dfs(int u,int sum,int state, int n, int k){
        if(sum+n-u<k)return ;
        if(sum==k){
            vector<int>path;
            for(int i=0;i<n;i++)
                if(state>>i&1)
                    path.push_back(i+1);
            res.push_back(path);
            return ;
        }
        dfs(u+1,sum+1,state|(1 << u),n,k);
        dfs(u+1,sum,state,n,k);
    }
    vector<vector<int>> combine(int n, int k) {
        dfs(0,0,0,n,k);
        return res;
    }
};

 

posted @ 2019-07-08 21:46  YF-1994  阅读(177)  评论(0编辑  收藏  举报