給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重複被選取。
說明:
所有數字(包括 target)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: candidates = [2,3,6,7], target = 7,
所求解集為:
[[7],
[2,2,3]
]示例 2:
輸入: candidates = [2,3,5], target = 8,
所求解集為:
[[2,2,2,2],
[2,3,3],
[3,5]
]
很顯然需要用回溯的思想來解題,記錄乙個臨時list儲存某個組合,記錄乙個num保證組合不會重複:
class
solution
:def
combinationsum
(self, candidates, target)
:"""
:type candidates: list[int]
:type target: int
:rtype: list[list[int]]
"""ifnot candidates:
return
candidates.sort(
)# 先排序
res =
self.helper(target, candidates, res,
,0)# 記錄乙個臨時list,0記錄位置保證不重複
return res
defhelper
(self, target, candidates, res, one, num)
:if target ==0:
# target為0說明剛好組合
return
if target < candidates[0]
:# 不可能有組合
return
for i in
range
(num,
len(candidates)):
if candidates[i]
> target:
break
tmp =
[i for i in one]
# 注意這裡要copy
) self.helper(target-candidates[i]
, candidates, res, tmp, i)
LeetCode 39 組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...
leetcode39 組合總和
參考 class solution if next num.size target num next 0 邊界條件 return 對於每個元素,有兩種處理方式,選當前元素或者不選當前元素 psol.push back num next 選當前元素 search num,next,psol,targe...
LeetCode39組合總和
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...