Simple backtracking solution to get all the possible subsets and then store them in a set before finally returning as a 2-d vector.
class Solution {
public:
void findSubsets(vector<int>&nums,int i,vector<int>&curr,set<vector<int>>&s)
{
if(i==nums.size())
{
s.insert(curr);
return;
}
curr.push_back(nums[i]);
findSubsets(nums,i+1,curr,s);
curr.pop_back();
findSubsets(nums,i+1,curr,s);
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
set<vector<int>> s;
vector<int> curr;
findSubsets(nums,0,curr,s);
vector<vector<int>> ans;
for(vector<int> v:s)ans.push_back(v);
return ans;
}
};