LeetCode 39. Combination Sumhtml
給一組數和一個目標值,求和爲目標值的組合。數組中的每一個數能夠取屢次。數組
像這種結果要求返回全部符合要求解的題,十有八九都是要利用到遞歸,並且解題的思路都大同小異,能夠發現這些題目發現都是一個套路,都是須要另寫一個遞歸函數。函數
遞歸函數中加入三個變量,start記錄當前的遞歸到的下標,answer爲一個組合解,res保存全部已經獲得的解,每次調用新的遞歸函數時,此時的target要減去當前數組的的數。code
注意一點是須要先將原數組排序,能夠避免重複。htm
class Solution { public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector< vector<int> > res; vector<int> answer; sort(candidates.begin(), candidates.end()); solve(candidates, target, res, answer, 0); return res; } void solve(vector<int>& candidates, int target, vector< vector<int> >& res, vector<int>& answer, int start) { if(target < 0) return; else if(target == 0) res.push_back(answer); else { for(int i = start; i < candidates.size(); i++) { answer.push_back(candidates[i]); solve(candidates, target-candidates[i], res, answer, i); answer.pop_back(); } } } };
LeetCode 40. Combination Sum IIblog
LeetCode All in One題解彙總(持續更新中...)排序
本文版權歸做者AlvinZH和博客園全部,歡迎轉載和商用,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利.遞歸