题目:
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:
void subsetWithDup_aux(set<vector<int>> &sv, vector<int>& path, int index, int count,
vector<int> &S){
if (count == 0){
sv.insert(path);
return;
}
if (index >= S.size())
return;
path.push_back(S[index]);
subsetWithDup_aux(sv, path, index + 1, count - 1, S);
path.pop_back();
subsetWithDup_aux(sv, path, index + 1, count, S);
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
sort(S.begin(), S.end());
set<vector<int>> sv;
for (int i = 0; i <= S.size(); i++){
vector<int> path;
subsetWithDup_aux(sv, path, 0, i, S);
}
return vector<vector<int>>(sv.begin(), sv.end());
}
};
点评:
组合的思想