4/06/2014

Leetcode -- Combination Sum

class Solution {  
 public:  
   vector<vector<int> > combinationSum(vector<int> &candidates, int target) {  
     int n = candidates.size();  
     return combinationSumHelper(candidates, n - 1, target);  
   }  
   vector<vector<int> > combinationSumHelper(const vector<int>& candidates, int index, int target) {  
     vector<vector<int> > result;  
     if(index < 0) {  
       return result;  
     }  
     int i = 0;  
     while(target - i * candidates[index] >= 0) {  
       vector<vector<int> > ret = combinationSumHelper(candidates, index -1, target - i * candidates[index]);  
       for(auto& entry:ret) {  
         for(int j = 0; j < i; j++) {  
           entry.emplace_back(candidates[index]);  
         }  
         sort(entry.begin(), entry.end());  
          result.emplace_back(entry);  
       }  
       if(target - i * candidates[index] == 0 && ret.empty()) {  
         vector<int> entry;  
         for(int j = 0; j < i; j++) {  
           entry.emplace_back(candidates[index]);  
         }  
         result.emplace_back(entry);  
       }  
       i++;  
     }  
     return result;  
   }  
 };  

No comments: