leetcode39 組合總和

2021-10-08 14:29:52 字數 1403 閱讀 2027

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

]1 <= candidates.length <= 30

1 <= candidates[i] <= 200

candidate 中的每個元素都是獨一無二的。

1 <= target <= 500

組合類問題一版考慮回溯法,對於回溯法適當的剪紙操作可以提高執行效率。

## 回溯法離不開遞迴,對於遞迴要確定終止條件以及遞迴體

## 本題,遞迴終止條件是找到乙個組合,和是target

## 剪枝操作,如果當前target剪去當前要進行組合的數小於0,break

## 組合當前數,然後從當前數繼續進行組合

## 把最後的組合的數出棧,進行回溯操作,完成不同的組合

## 嘗試當前組合數的下乙個位置上的資料的組合。

## 測試用例 [2,3,6,7] 7

class solution:

def combinationsum(self, candidates: list[int], target: int) -> list[list[int]]:

def dfs(candidates,begin,size,path,res,target):

if target == 0:

return

for index in range(begin,size):

residue = target - candidates[index]

if residue < 0:

break

dfs(candidates,index,size,path,res,residue)

path.pop()

path =

res =

size = len(candidates)

if size == 0:

return

candidates.sort()

dfs(candidates,0,size,path,res,target)

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