leetcode刷題 40組合總和2

2022-09-06 23:21:35 字數 1291 閱讀 3502

給定乙個陣列 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 呼叫下一元素

class

solution:

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):

print

(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,...