https://leetcode-cn.com/problems/subsets-ii/
思路:有重复元素,所以枚举的时候要注意了。我们先对nums从小到大排序,假设当前选择了第x个元素,如果我们没有选择第x-1个元素但是这两个元素的值相等,那么一定会有重复的子集,直接跳过这种情况就行了。
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> ans;
int n=nums.size();
int times=1<<n;
ans.push_back(vector<int>());
for(int i=1;i<times;i++)
{
vector<int> tmp;
bool flag=true;
for(int j=0;j<n;j++)
{
if(i&(1<<j))
{
if(j&&nums[j]==nums[j-1]&&(!(i&(1<<(j-1)))))
{
flag=false;
break;
}
tmp.push_back(nums[j]);
}
}
if(flag)
ans.push_back(move(tmp));
}
return ans;
}
};