Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Difficulty:Medium
应对重复放一个判断语句就好了:
if(index>comp&&nums[index]==nums[index-1]&&index>0){
index++;
continue;
}
代码如下:
void gen(vector<vector<int> >& ans,vector<int>& v,vector<int>& nums,int dep,int n,int index){
if(dep<=0||index>n-1)
return;
vector<int> v1 = v;
int comp = index;
while(index<=n-dep)
{
if(index>comp&&nums[index]==nums[index-1]&&index>0){
index++;
continue;
}
v1.push_back(nums[index]);
if(dep==1)
ans.push_back(v1);
else
gen(ans,v1,nums,dep-1,n,index+1);
v1 = v;
index++;
}
}
vector<vector<int> > subsetsWithDup(vector<int>& nums) {
vector<int> v;
vector<vector<int> > ans;
ans.push_back(v);
sort(nums.begin(),nums.end());
//ans.push_back(nums);
int i = 1;
int len = nums.size();
while(i<=len)
{
gen(ans,v,nums,i,len,0);
i++;
}
return ans;
}