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