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 sub(vector<int> &a, vector<int> set, vector<vector<int> > &sets, int n, int i, bool t) { if(n == i) { sets.push_back(set); return; } if((t == true)&&(a[i] == a[i-1])) { set.push_back(a[i]); sub(a,set,sets,n,i+1,true); return; } else { sub(a,set,sets,n,i+1,false); set.push_back(a[i]); sub(a,set,sets,n,i+1,true); return; } } vector<vector<int> > subsetsWithDup(vector<int> &S) { vector<int> a = S; sort(a.begin(),a.end()); vector<int>set; vector<vector<int> > sets; int n = a.size(); int num = 0; sub(a,set,sets,n,num,false); return sets; } };