LeetCode系列39 組合總和

2021-10-10 05:00:17 字數 1238 閱讀 2209

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

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

說明:所有數字(包括 target)都是正整數。

解集不能包含重複的組合。

示例 1:

輸入:candidates = [2,3,6,7], target = 7,

所求解集為:

[[7],

[2,2,3]

]

方法一:搜尋回溯

對於這類尋找所有可行解的題,我們都可以嘗試用「搜尋回溯」的方法來解決。

回到本題,我們定義遞迴函式dfs(target, combine, idx)表示當前在candidates陣列的第idx位,還剩target要組合,已經組合的列表為combine。遞迴的終止條件為target <= 0或者candidates陣列被全部用完。那麼在當前的函式中,每次我們可以選擇跳過不用第idx個數,即執行dfs(target, combine, idx + 1)。也可以選擇使用第idx個數,即執行dfs(target - candidates[idx], combine, idx),注意到每個數字可以被無限制重複選取,因此搜尋的下標仍為idx

class

solution

if(target ==0)

// 直接跳過

dfs(candidates, target, ans, combine, idx +1)

;// 選擇當前數

if(target - candidates[idx]

>=0)

} vectorint>

>

combinationsum

(vector<

int>

& candidates,

int target)

};

方法二:回溯+剪枝

leetcode的精選題解

LeetCode筆記 39組合總和

題目 給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例...

LeetCode 39 組合總和

給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...

leetcode39 組合總和

參考 class solution if next num.size target num next 0 邊界條件 return 對於每個元素,有兩種處理方式,選當前元素或者不選當前元素 psol.push back num next 選當前元素 search num,next,psol,targe...