思路:
回溯法+排序剪枝
為了對演算法進行剪枝處理,首先對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...