LeetCode---Combinations

来源:互联网 发布:网络时时彩有正规平台 编辑:程序博客网 时间:2024/06/01 07:51

题目大意:给出两个整数n和k,找出从1~n中包含k个数的所有组合。

算法思想:

1.计算出1~n个元素构成集合的所有子集合的个数subset_nums。

2.将每个子集合用0~subset_nums进行编号,将该编号表示成二进制形式。

3.找出出每个编号中二进制位数为1的个数等于k的编号。

4.然后遍历这些编号的二进制将对应位为1元素放入集合中。

5.将每个找出的子集合放入结果集中。

代码如下:

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<vector<int> >res;        if(n<k||n==0||k<0) return res;        int subset_nums=pow(2,n);        vector<int> temp;        for(int i=0;i<subset_nums;++i){        bitset<32> bitset(i);        if(bitset.count()!=k) continue;        for(int i=0;i<n;i++){        if(bitset[i]){           temp.push_back(i+1);  }}res.push_back(temp);temp.clear();}return res;    }};


0 0
原创粉丝点击