Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,2]
, a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
Solution:
Code:
<span style="font-size:14px;">class Solution {
public:
void helper(vector<vector<int> > &results, vector<int> &result, const vector<int> &S, int index, const int &length) {
if (index == length) return;
for (int i = index; i < length; i++) {
result.push_back(S[i]);
results.push_back(result);
helper(results, result, S, i+1, length);
result.pop_back();
while (i+1 < length && S[i+1] == S[i])
i++;
}
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
int length = S.size();
vector<vector<int> > results;
vector<int> result;
results.push_back(result);
sort(S.begin(), S.end());
helper(results, result, S, 0, length);
return results;
}
};</span>