40 組合總和 II(回溯 樹根去重)

2021-10-19 17:42:17 字數 1431 閱讀 9379

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

candidates 中的每個數字在每個組合中只能使用一次。

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

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

示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,

所求解集為:

[[1, 7],

[1, 2, 5],

[2, 6],

[1, 1, 6]

]本題相比其他的組合,區別在於原陣列中包含重複元素,解集中不能有重複的組合,關鍵在於對樹根去重,比如a三個元素都可以作為根,但是a[0],a[1]與a[1],a[0]是重複的,這就要在選a[1]作為「根」的時候判斷一下該元素是否可以作為「根」,在這裡引入了used陣列來對每個元素的使用情況進行記錄。

當遍歷到乙個新的可能作為「根」的元素時,先看它前面那個元素是否和它相同,如果相同則看used陣列,若used[i - 1] == false 說明這兩個節點在數結構的一層,都是等著被選做「根」的,是橫著走過來的,如果used[i - 1] == true,則說明是一條樹枝,是從上到下走過來的。我們要做到的去重就是讓這些重複的元素只做出來一條樹枝,不讓重複的元素再次當樹根所以遇到false就跳過,遇到true就讓它們組成一條唯一的樹枝(組合)

40 組合總和 II(回溯)

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...

40 組合總和 II

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...

40 組合總和 II

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...