题目大意:给出一个数组,数组中可能包含重复元素,列出其所有的子集合,要求子集合中的元素给递减排列且子集合不能够重复。
算法思想:
1.算法整体思想如LeetCode---Subsets
2.之后利用set的特性取出重复的子集合即可。
代码如下:
class Solution {
public:
vector<vector<int>> subsetsWithDup(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();
}
set<vector<int> > remove_duplicate(res.begin(),res.end());
res.clear();
res.assign(remove_duplicate.begin(),remove_duplicate.end());
return res;
}
};