Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2] Output: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
class Solution {
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<int> ivec;
set<vector<int> > z;
vector<vector<int> > res;
sort(nums.begin(),nums.end()); // 排序是为了去重复
genesub(nums,0,ivec,z);
set<vector<int> >::iterator iter;
for(iter=z.begin();iter!=z.end();++iter){
res.push_back(*iter);
}
return res;
}
void genesub(vector<int> &nums,int k,vector<int> temp,set<vector<int> > &res){
res.insert(temp);
for(int i=k;i<nums.size();++i){
temp.push_back(nums[i]);
genesub(nums,i+1,temp,res);
temp.pop_back();
}
}
};