Topic:
Given a collection of integers that might contain duplicates, S, return all possible subsets.
note:
- Elements in a subset must is in non-descending order.
- The solution set must not contain duplicate subsets.
for example,
if s =
[ 2], [1], [1,2,2], [2,2], [up ], []]
Idea: The same idea as above
vector<vector<int> > v; vector<vector<int> > Subsetswithdup (vector<int> &s) { sort (s.begin (), S.end ()); Generate (Vector<int> (), S, 0); return v; } void Generate (vector<int> res, vector<int> &s, int i) { if (i = = S.size ()) {for (int i = 0; I < v.size (); i++) { if (v[i] = = res) { return; } } V.push_back (res); return; } else { Generate (res, S, i+1); Res.push_back (S[i]); Generate (Res, S, i+1); } }
Or replace one of the HELPR functions above
void Helper_array (vector<int>& vec,int begin,int& k,vector<int>& com) { if (begin >= vec.size () | | K <0) return; Com.push_back (Vec[begin]); k--; if (k = = 0) { int i; For (I=0;i<com.size (); i++) cout<<com[i]<< ""; cout<<endl; } Helper_array (vec,begin+1,k,com); Com.pop_back (); k++; int i; For (I=begin+1;i<vec.size ();) { if (vec[i] = = Vec[begin]) i++; else break ; } Helper_array (vec,i,k,com); }
Subsets Ii--leetcode