1 class Solution {
2 public:
3 vector<vector<int> > subsetsWithDup(vector<int> &S) {
4 // IMPORTANT: Please reset any member data you declared, as
5 // the same Solution instance will be reused for each test case.
6 sort(S.begin(), S.end());
7 int n = S.size();
8 vector<vector<int>> rlt;
9 if (n<=0)
10 return rlt;
11 rlt.push_back(vector<int>());
12 int i, j;
13 for (i=0; i<n; i){
14 int m = rlt.size();
15 int dn=0;
16 while(dn+i<n && S[i+dn]==S[i])
17 dn++;
18 for (j=0; j<m; j++){
19 for (int k=1; k<=dn; k++){
20 vector<int> tmp = rlt[j];
21 for (int l=1; l<=k; l++){
22 tmp.push_back(S[i]);
23 }
24 rlt.push_back(tmp);
25 }
26 }
27 i += dn;
28 }
29 return rlt;
30 }
31 };