给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());//排序很重要
tem.clear();
res.clear();
res.push_back(tem);
int len=nums.size();
for(int i=1;i<=len;i++)
{
dfs(nums,0,0,i);
}
return res;
}
void dfs(vector<int>& nums,int start, int n,int num)
{
int length=nums.size();
tem.push_back(nums[start]);
start++;
n++;
if(n==num)
{
res.push_back(tem);
}
if(start<length&&n<num)
{
dfs(nums,start,n,num);
}
tem.pop_back();
n--;
if(n<num)
{
while(start<length)//去重
{
if(nums[start]!=nums[start-1])
{
dfs(nums,start,n,num);
break;
}
else
{
start++;
}
}
}
}
private:
vector<int> tem;
vector<vector<int> >res;
};