思路:
- 和Subsets类似,因为数组中有重复元素,所以用set存储结果,相当于正常遍历然后去掉了重复。
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(begin(nums),end(nums));
vector<vector<int>>re;
set<vector<int>>res;
vector<int>tmp;
dfs(nums,res,0,tmp);
copy(res.begin(),res.end(),back_inserter(re)); //
return re;
}
void dfs(vector<int>& nums,set<vector<int>>& res,int i,vector<int>& tmp){
if(i == nums.size()){
res.insert(tmp);
return ;
}
for(int j = 0; j < 2; j++){
if(j == 0){
dfs(nums,res,i+1,tmp);
}else{
tmp.push_back(nums[i]);
dfs(nums,res,i+1,tmp);
tmp.pop_back();
}
}
}
};