4/12/2014

Leetcode -- Subsets

class Solution {  
 public:  
   vector<vector<int> > subsets(vector<int> &S) {  
     sort(S.begin(), S.end());  
     vector<vector<int> > subs{vector<int>()};  
     for(int i = 0; i < S.size(); ++i) {  
       vector<vector<int> > newSubs;  
       for(int j = 0; j < subs.size(); ++j) {  
         vector<int> entry(subs[j]);  
         entry.emplace_back(S[i]);  
         newSubs.emplace_back(entry);  
       }  
       for(auto& v:newSubs) {  
         subs.emplace_back(v);  
       }  
     }  
     return subs;  
   }  
 };  
class Solution {  
 public:  
   vector<vector<int> > subsets(vector<int> &S) {  
     sort(S.begin(), S.end());  
     vector<int> saver;  
     vector<vector<int> > result{saver};  
     generate(S, 0, result, saver);  
     return result;  
   }  
   void generate(vector<int>& S, int step, vector<vector<int> >& result, vector<int>& saver) {  
     for(int i = step; i < S.size(); ++i) {  
       saver.emplace_back(S[i]);  
       result.emplace_back(saver);  
       if(i < S.size() - 1) {  
         generate(S, i + 1, result, saver);  
       }  
       saver.pop_back();  
     }  
   }  
 };  
Even Better
class Solution {  
 public:  
   vector<vector<int> > subsets(vector<int> &S) {  
     sort(S.begin(), S.end());  
     vector<vector<int> > subs{vector<int>()};  
     for(int i = 0; i < S.size(); ++i) {  
       vector<vector<int> > newSubs;  
       for(int j = 0; j < subs.size(); ++j) {  
         vector<int> entry(subs[j]);  
         entry.emplace_back(S[i]);  
         newSubs.emplace_back(entry);  
       }  
       for(auto& v:newSubs) {  
         subs.emplace_back(v);  
       }  
     }  
     return subs;  
   }  
 };  

No comments: