39 組合總和 回溯法

2021-09-29 23:08:36 字數 916 閱讀 2215

思路:

回溯法+排序剪枝

為了對演算法進行剪枝處理,首先對candidatescandidates排序

特判,若candidatescandidates為空,則返回

回溯函式helper()helper(),傳入引數:下一加和索引ii,當前已加和陣列tmptmp,下一目標targettarget

若target0target0,說明當前和滿足條件,將當前加和陣列tmptmp加入resres,並return。

剪枝 因為已經將candidatescandidates排序,所以當下一目標小於下一待加和數時,return。並且當下一待加和索引inin時,return。為了防止陣列越界,將條件inin放在targetclass

solution

:def

combinationsum

(self, candidates: list[

int]

, target:

int)

-> list[list[

int]]:

ifnot candidates:

return

n =len(candidates)

res =

candidates.sort(

)def

helper

(i,tmp,target)

:if target==0:

return

if i == n or target:return

helper(i,tmp+

[candidates[i]

],target - candidates[i]

) helper(i+

1,tmp,target)

helper(0,

,target)

return res

39 組合總和 回溯演算法

candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 輸入 candidates 2,3,5 target 8,所求解集...

leetcode 39 組合總和(回溯)

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

39 組合總和

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