給定乙個陣列 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]]
下面先附上**:
這道題的考點還是使用回溯法去解決問題,而且重點在於題目中給定的元素不可重複使用,所以這就涉及到了如何在二維陣列中去重,二維陣列去重和一維陣列不同,下面貼上其他博主所使用的去重方法:(原文:
一維的list去重可以用set(list),但是二維的list轉set就會報錯 unhashable type: 『list』
原因是set傳進來的是不可雜湊的變數
python中那麼哪些是可雜湊元素?哪些是不可雜湊元素?
可雜湊的元素有:int、float、str、tuple
不可雜湊的元素有:list、set、dict
為什麼 list 是不可雜湊的,而 tuple 是可雜湊的
(1)因為 list 是可變的在它的生命期內,你可以在任意時間改變其內的元素值。
(2)所謂元素可不可雜湊,意味著是否使用 hash 進行索引
(3)list 不使用 hash 進行元素的索引,自然它對儲存的元素有可雜湊的要求;而 set 使用 hash 值進行索引
正確做法:將list轉成tuple,這樣就可以用set去重。
dic = list(set([tuple(t) for t in dic]))
dic = [list(v) for v in dic]
leetcode 40 組合總和
給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...
leetcode40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...
LeetCode 40 組合總和 II
給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...