給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重複被選取。
輸入: candidates = [2,3,6,7], target = 7,
所求解集為:
[ [7],[2,2,3]]
看起來很複雜,使用遞迴總體思想很簡單:
要選擇第乙個元素, 這個元素仍然可以重複多次選擇:combinationsum(candidates[0:], target-candidates[0])
不選擇第乙個元素, 由於沒有重複的元素,這個元素不會再被選擇了:
combinationsum(candidates[1:], target)
上面的每種情況又分別包含了選擇第二個元素和不選第二個元素的情況, 依次遞迴.
停止條件:
target 為0, 和清除掉符合要求的元素以及大於target的元素之後,candidate為空了.
2.記錄下剛好等於target的結果,為成功搜尋.
class solution(object):
def combinationsum(self, candidates, target):
""":type candidates: list[int]
:type target: int
:rtype: list[list[int]]
"""if target<=0 or len(candidates)==0:
return
res =
for i in candidates[: : -1]:
# 某乙個元素和target 相等了
if i==target:
candidates.remove(i)
# 清除大於target的元素
elif i>target:
candidates.remove(i)
# 當candidate中已經沒有元素的時候
if len(candidates)==0:
return res
# 某次選擇乙個元素或者不選
# 選當前元素
tmp = self.combinationsum(candidates[0:], target-candidates[0])
for j in tmp:
tmp1 = self.combinationsum(candidates[1:], target)
for j in tmp1:
return res
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...