[LeetCode]Combination Sum
2013-05-27 19:15
302 查看
class Solution { //DFS //sort candidates first and then DFS public: vector<vector<int> > combinationSum(vector<int> &candidates, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function sort(candidates.begin(), candidates.end()); vector<vector<int>> ans; vector<int> path; combinationSum_aux(0, 0, target, path, ans, candidates); return ans; } void combinationSum_aux( int index, int sumNow, int target, vector<int> path, vector<vector<int>>& ans, vector<int>& candidates ) { //throw std::exception("The method or operation is not implemented."); if(sumNow == target) { ans.push_back(path); return; } if(index >= candidates.size()) return; int num = (target-sumNow)/candidates[index]; int cur = 0; for (int i = 0; i <= num; ++i) { combinationSum_aux(index+1, sumNow+cur, target, path, ans, candidates); path.push_back(candidates[index]); cur += candidates[index]; } } };
second time
class Solution { public: void combinationSumUtil(vector<int>& candidates, int target, int curIdx, vector<int> curPath, vector<vector<int> >& allPath) { if(target == 0) { allPath.push_back(curPath); return ; } if(curIdx >= candidates.size()) return; if(curIdx >= 1 && candidates[curIdx] == candidates[curIdx-1]) combinationSumUtil(candidates, target, curIdx+1, curPath, allPath); else { int curSum = 0; do { if(target >= curSum) combinationSumUtil(candidates, target-curSum, curIdx+1, curPath, allPath); curPath.push_back(candidates[curIdx]); curSum += candidates[curIdx]; } while(target >= curSum); } } vector<vector<int> > combinationSum(vector<int> &candidates, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function sort(candidates.begin(), candidates.end()); vector<int> curPath; vector<vector<int> > allPath; combinationSumUtil(candidates, target, 0, curPath, allPath); return allPath; } };
相关文章推荐
- LeetCode | Combination Sum
- [leetCode] Combination Sum
- leetcode 39: Combination Sum
- LeetCode-Combination Sum
- leetcode—Combination Sum
- LeetCode-39-Combination Sum, 回溯dfs,Python的list.append()覆盖前面,tuple,set
- Leetcode 39 Combination Sum
- LEETCODE: Combination Sum
- 【leetcode】Combination Sum
- 回溯之Leetcode39——Combination Sum
- [LeetCode] Combination Sum 2
- Leetcode--Combination Sum
- LeetCode 10.7 Combination Sum
- leetcode39 Combination Sum
- leetcode: Combination Sum
- [leetcode]Combination Sum
- [leetcode][回溯] Combination Sum
- LeetCode_39 Combination Sum
- [Leetcode]Combination Sum
- LeetCode039 Combination Sum