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], [] ]
其实差别就在于,LEETCODE中有很多类似的:
if(pre == S[ii])
continue;
class Solution {
public:
void search(vector<vector<int> > &results, vector<int> &temp, vector<int> &S, int idx) {
int pre = 0x7fffffff;
for(int ii = idx + 1; ii < S.size(); ii ++) {
if(pre == S[ii])
continue;
pre = S[ii];
temp.push_back(pre);
results.push_back(temp);
search(results, temp, S, ii);
temp.pop_back();
}
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
vector<vector<int> > results;
vector<int> temp;
results.push_back(temp);
sort(S.begin(), S.end());
search(results, temp, S, -1);
return results;
}
};