演算法 LeetCode39 組合總和

2021-10-24 05:31:09 字數 2687 閱讀 5141

原題鏈結

給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。

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

說明:

示例 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]

]主要思路:

每個遞迴結點,儲存輸入陣列,目標數,結果集,當前和,當前開始下標,當前列表

**:

使用差來進行狀態儲存

class

solution

public

void

dfs(

int remain,

list

<

integer

>

list,

int start,

int[

] candidates,

list

<

list

<

integer

>

>

ans)

for(

int i = start; i < candidates.length; i++)}

}

寫法2:

class

solution

/** * 遞迴函式

* @param sum 當前和

* @param start 當前開始下標

* @param list 當前列表

*/public

void

dfs(

int sum,

int start,

list

<

integer

>

list)

if(sum == target)

for(

int i = start; i < candidates.length; i++)}

}

主要思路:

**:

class

solution

public

void

dfs(

int remain,

list

<

integer

>

list,

int start,

int[

] candidates,

list

<

list

<

integer

>

>

ans)

for(

int i = start; i < candidates.length; i++

) list.

add(candidates[i]);

dfs(tempremain, list, i, candidates, ans)

; list.

remove

(list.

size()

-1);

}}}

**寫法2: **

class

solution

/** * 遞迴函式

** @param sum 當前和

* @param start 當前開始下標

* @param list 當前列表

*/public

void

dfs(

int sum,

int start,

list

<

integer

>

list)

if(sum == target)

for(

int i = start; i < candidates.length; i++

) list.

add(candidates[i]);

dfs(tempsum, i, list)

;// 消除狀態影響

list.

remove

(list.

size()

-1);

}}}

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