Leetcode題庫 39 組合總和

2022-05-20 23:47:43 字數 1562 閱讀 3338

@author: zzq

@software: pycharm

@file: combinationsum.py

@time: 2018/11/14 18:23

要求:給定乙個無重複元素的陣列 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]

]

思路:深搜+減枝

注意停止搜尋:當和大於target時,結束該條支路的搜尋。

注意去重:先對陣列排好序,每次都處理當前元素以後的元素。

注意: 存入ans時需要將臨時陣列拷貝出來,否則ans中的答案會因為temp_ans的改變而一直改變。

import copy

class solution():

def __init__(self):

pass

def combinationsum(self, candidates, target):

""":type candidates: list[int]

:type target: int

:rtype: list[list[int]]

"""candidates.sort()

can_len = len(candidates)

if can_len == 0:

return

ans =

temp_ans =

temp_sum = 0

start_index = 0

self.dfs(temp_ans, temp_sum, start_index, target, candidates, ans)

return ans

def dfs(self, temp_ans, temp_sum, start_index, target, candidates, ans):

if temp_sum == target:

tt_ans = copy.deepcopy(temp_ans)

return

if temp_sum > target:

return

for i in range(start_index, len(candidates)):

self.dfs(temp_ans, temp_sum + candidates[i], i, target, candidates, ans)

temp_ans.pop()

LeetCode筆記 39組合總和

題目 給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例...

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