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; } };
4/06/2014
Leetcode -- Combination Sum
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment