組合總和 II(剪枝演算法)

2021-10-02 20:21:09 字數 1205 閱讀 9501

ps:做這道題之前需要先明白《組合總和》

給定乙個陣列 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]]示例2:

輸入: candidates =[2

,5,2

,1,2

], target =5,

所求解集為:[[

1,2,

2],[

5]]

參考《組合總和》的解題思路,這裡有兩點不同:

元素不能重複利用,所以每次向下遞迴的時候的不能是i,應該是i+1

如果只改1的話,你會發現有重複的,因為數字有重複的話(而這個數字又恰好在答案裡面,那麼這個答案勢必會重複)

訣竅就是,同一行的決策樹是不能有重複數字的,有的話就跳過(也就是迴圈中)

class solution

private void combinationsum2

(int[

] candidates, int start, int target, linkedlist track)

else

if(target ==0)

for(int i = start; i < candidates.length; i++)if

(i > start && candidates[i]

== candidates[i -1]

) track.

add(candidate)

;combinationsum2

(candidates, i +

1, target - candidate, track)

; track.

removelast()

;}}}

演算法 組合總和 II

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

組合總和II

給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...

組合總和 II

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