Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
For example,
If S = [1,2,2]
,
a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
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); } }或者将上面的一个helpr函数替换
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); }
原文地址:http://blog.csdn.net/yusiguyuan/article/details/44856121