class Solution {
public:
vector> res;
void subsets(vector& S, int start, vector& numset) {
if (start >= S.size())
return;
numset.push_back(S[start]);
res.push_back(numset);
subsets(S, start + 1, numset);
numset.pop_back();
while (start + 1 < S.size() && S[start] == S[start + 1])
++start;
if (start + 1 < S.size())
subsets(S, start + 1, numset);
}
vector
> subsetsWithDup(vector &S) {
// Note: The Solution object is instantiated only once and is reused by each test case.
res.clear();
vector numset;
res.push_back(numset);
sort(S.begin(), S.end());
subsets(S, 0, numset);
return res;
}
};