Subsets II
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], [] ]
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > result,save;
result.push_back(vector<int>());
if(S.empty())
return result;
sort(S.begin(),S.end());
result.push_back(vector<int>(1,S[0]));
save.push_back(vector<int>(1,S[0]));
for(int i=1;i<S.size();++i){
if(S[i]==S[i-1]){
for(int j=0;j<save.size();++j){
save[j].push_back(S[i]);
result.push_back(save[j]);
}
}else{
save.clear();
for(int j=result.size()-1;j>=0;--j){
result.push_back(result[j]);
result.back().push_back(S[i]);
save.push_back(result.back());
}
}
}
return result;
}
};