http://oj.leetcode.com/problems/subsets-ii/
class Solution {
public:
// First, we sort the input set
// Second, whenever we have a new element, we count the number of this element
// Third, we enumerate how many elements we put into the current selection
vector<vector<int> > res;
void subsetsWithDupHelper(vector<int> &S, vector<int> current, int pos){
if(pos==S.size()){
res.push_back(current);
return;
}
int cnt=1;
while((pos+cnt)<S.size()&&S[pos]==S[pos+cnt]) cnt++;
for(int i=0;i<=cnt;i++){
subsetsWithDupHelper(S,current,pos+cnt);
current.push_back(S[pos]);
}
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
res.clear();
sort(S.begin(),S.end());
subsetsWithDupHelper(S, vector<int>(), 0);
return res;
}
};