代码改变世界

leetcode - Subsets II

2013-11-06 11:22  张汉生  阅读(193)  评论(0编辑  收藏  举报

 

 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 };