leetcode 39. 組合總和(dfs簡單路過)

給定一個無重複元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和爲 target 的組合。

candidates 中的數字可以無限制重複被選取。

說明:

所有數字(包括 target)都是正整數。
解集不能包含重複的組合。
示例 1:

輸入: candidates = [2,3,6,7], target = 7,
所求解集爲:
[
[7],
[2,2,3]
]
示例 2:

輸入: candidates = [2,3,5], target = 8,
所求解集爲:
[
[2,2,2,2],
[2,3,3],
[3,5]
]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/combination-sum
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。


思路分析

每一個位置的數在選擇的時候有兩種可能,選或不選,深度遍歷即可。


代碼分析

class Solution {
    vector<vector<int>> new_candidates;
    vector<int> temp;
    int sum;
    void dfs(vector<int>& candidates,int pos,int target){
        if(sum == target){
            new_candidates.push_back(temp);
            return ;
        }
        if(sum > target)
            return ;
        if(pos >= candidates.size())
            return ;
        temp.push_back(candidates[pos]);
        sum += candidates[pos];
        dfs(candidates,pos,target);//繼續遍歷同一個數,選同一個數
        temp.pop_back();
        sum -= candidates[pos];

        dfs(candidates,pos + 1,target);//遍歷下一個數,選下一個數
    }
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        sum = 0;
        dfs(candidates,0,target);
        return new_candidates;
    }
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章