题目大意:给出一个数组,列出所给数组的所有子集合,要求子集合中的元素非降序排列。
算法思想:
1.根据数组的规模计算出子集合的个数sub_count。
2.由于要使子集合中的元素非降序排列则将原始数组排序。
3.将每个子集合编号赋值范围为0~sub_count-1,将编号值转化为其二进制表示,对应原数组中的每个元素如果二进制位为1则将其放入子集合中(如000对应的子集合为[])。将每个编号形成的子集合放入结果集中。
代码如下:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res;
int n=nums.size();
if(n==0) return res;
int subset_count=pow(2,n);
vector<int> temp;
sort(nums.begin(),nums.end());
for(int i=0;i<subset_count;++i){
bitset<32> bitset(i);
for(int j=0;j<n;++j){
if(bitset[j]){
temp.push_back(nums[j]);
}
}
res.push_back(temp);
temp.clear();
}
return res;
}
};