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) {
vector<vector<int> > res;
vector<int> solution;
res.push_back(solution);
if (S.size()==0)
return res;
sort(S.begin(), S.end());
helper(res,solution,S,0);
return res;
}
void helper(vector< vector<int> >& res, vector<int>& solution, vector<int>& input, int level){
for (int i=level; i<input.size();i++){
solution.push_back(input[i]);
res.push_back(solution);
helper(res,solution,input,i+1);
solution.pop_back();
while(i<input.size()-1 && input[i]==input[i+1])
i++;
}
}
};