39 組合總和

2021-09-29 01:19:03 字數 1545 閱讀 3665

題目:

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

]思路:

利用回溯法。

遍歷陣列每個數,尋找每個數與自身或者和其他數相加等於目標值的組合。

如題目:

輸入: candidates = [2,3,6,7], target = 7,

首先back(0,0,)(起始遍歷位置,陣列相加值,遍歷過程儲存陣列)

i=0,sum=0,tmp=

i=0,sum=2,tmp=2

因為candidates 中的數字可以無限制重複被選取。

i=0,sum=6,tmp=[2,2,2].再加陣列任何乙個元素超過,這個陣列組合扔掉。

i=0,sum=4,tmp=[2,2],加下乙個3,剛剛好,陣列留下。

i=0,sum=4,tmp=[2,2],除了3,加陣列任何其他元素都超過,[2,2]組合已完成。

i=0,sum=2,tmp=[2],加3,3超過,加陣列其他任何乙個也超過。[2]組合已完成。

i=1,sum=3,tmp=[3]

i=1,sum=6,tmp=[3,3],加3超過,加陣列其他也超過。[3,3]組合已完成。

i=1,sum=3,tmp=[3],加3後的數字都超過目標值。[3]已完成。

i=2,sum=6,tmp=[6],同理。

i=3,sum=7,tmp=[7].加入答案。

陣列遍歷完成。答案是[2,2,3]和[7]

**:

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

candidates.sort()

leng=len(candidates)

ans=

def backfunc(i,sum,tmp):

if sum>target or i==leng:

return

if sum==target:

return

for j in range(i,leng):

if sum+candidates[j]>target:

break

backfunc(j,sum+candidates[j],tmp+[candidates[j]])

backfunc(0,0,)

return ans

39 組合總和

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

39 組合總和

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

39 組合總和

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