1. 程式人生 > >39. 組合總和

39. 組合總和

給定一個無重複元素的陣列 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]
]
深搜來做。

1、注意減支:如果得到的當前和sum大於target,直接返回,不再往下搜尋。

2、注意去重,也起到減支的作用:一開始就將輸入陣列排好序,每一層往下搜尋的時候,只從這個數的位置往後進行搜尋,因為它的前面數,肯定已經被處理過了。

class Solution {
public:
    void dfs(vector<int>& candidates, int target, vector<vector<int>> &re, vector<int> &temp, int sum, int level){
        if (sum > target)  return;//減支
        if (sum == target) {
            re.push_back(temp);
            return;
        }

        for (int i=level; i<candidates.size();/*避免出現重複元素,減支*/ ++i){
                temp.push_back(candidates[i]);
                dfs(candidates, target, re, temp, sum + candidates[i], i);
                temp.pop_back();
        }
    }
    
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        sort(candidates.begin(), candidates.end());//排序,方便後來減支
        vector<vector<int>> re;
        vector<int> temp;
        dfs(candidates, target, re, temp, 0, 0);
        return re;
    }
};

相關推薦

LeetCode 39. 組合總和(Combination Sum)

gin -s ati div span i++ 不能 ida 思路 題目描述 給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以

Leetcode學習筆記 39 組合總和

轉載自:https://www.unclegem.cn/2018/09/10/Leetcode學習筆記-39-組合總和/ 題目: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 c

leetcode------39--組合總和

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。

leetcode python 39. 組合總和(中等,陣列,遞迴)

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明:所有數字(包括 target)都是正整數。解集不能包含重複的組合。 示例 1

LeeCode 39 組合總和(天坑啊java的值傳遞,頭都被打懵了)

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數。 解集不能包

39. 組合總和 我的第一個DFS!

連結:https://leetcode-cn.com/problems/combination-sum/description/ 一看題目就覺得很熟悉,這不是化簡後的揹包問題嗎!憑著記憶將DFS寫出來,發現其實也沒那麼難! 本題是可以重複選,如果是不重複,則將

LeetCode筆記——39組合總和

題目: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數。

Leetcode:39. 組合總和II

class Solution { public:     vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {         sort(candida

leetcode 39:組合總和

         同樣是一個遞迴的題,類似與leetcode17。首先將輸入的陣列排序,這樣能夠保證先從小的數開始取,為了使得結果也是有序的,不至於重複,取一個數a要看是否大於等於已經取的數。 比如candidates=[2,3,7],target=14 如果已經取了

Leetcode 39. 組合總和

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數。 解集不能包

LeetCode 39. 組合總和 Combination Sum(C語言)

題目描述: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數。

LeetCode-39. 組合總和

題目地址:https://leetcode-cn.com/problems/combination-sum/ 思路:dfs,排序剪枝 AC程式碼: class Solution { public: vector<vector<int>>ans;

Leetcode演算法Java全解答--39. 組合總和

Leetcode演算法Java全解答–39. 組合總和 題目 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被

39. 組合總和

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明:所有數字(包括 target)都是正整數。解集不能包含重複的組合。 

【LeetCode】39. 組合總和

題目描述 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數。

39. 組合總和 + 40.

思路:遞迴,但是具體實現細節還是需要參考別人的程式碼。 遞迴整體思路應該就是昨天和今天這兩個。一個是帶返回值,一個在引數傳遞時改變。 class Solution { public: v

[Leetcode] 39. 組合總和

題目描述:給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重

【LeetCode】39. 組合總和 結題報告 (C++)

題目描述: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是

LeetCode 39 40 組合總和 組合總和II (回溯)

1.組合總和 難度:中等 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是正整數

(LeetCode 39組合總和 [DFS: 暴力搜尋 + 剪枝 + 去重]

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