题目大意:给出两个整数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;
}
};