給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的每個數字在每個組合中只能使用一次。
此題思路與39題類似,利用回溯的方式,但是難點在於不能重複利用。
避免重複要讓同一層級不出現相同的元素,卻允許了不同層級之間的重複相同元素:
1/ \
2 2 這種情況不會發生
/ \
5 51/
2 這種情況確是允許的
/2
因此在剪枝時,需要將重複的元素刪除。
演算法:1.對candidates進行排序
2.回溯函式combination:索引i,當前陣列tmp,下一目標target:
2.1 當target == 0時,滿足條件,tmp新增進入result
2.3 呼叫後續元素(不允許重複),在j遍歷區間[i,n)中:
2.3.1剪枝當
j>idx 且candidates[j]==candidates[j-1]時,會呼叫重複的元素,將其刪除
2.3.2 呼叫下一元素
classsolution:
def combinationsum2(self, candidates: list[int], target: int) ->list[list[int]]:
if(not
candidates):
return
n=len(candidates)
result=
candidates.sort()
defcombination(idx, tmp, target):
(idx, tmp, target)
if target ==0 :
return
if idx == n or target return
for j in
range(idx, n):
if j>idx and candidates[j]==candidates[j-1]:
continue
combination(j+1, tmp+[candidates[j]],target-candidates[j])
combination(0,,target)
return result
LeetCode刷題筆記 40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 ...
leetcode刷題之旅(39)組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 輸入 candida...
LeetCode 40組合總數
給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...