LeetCode 39. Combination Sum

問題連接

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和博客園全部,歡迎轉載和商用,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利.遞歸

相關文章
相關標籤/搜索