39組合總和

2021-10-03 18:22:20 字數 1168 閱讀 2165

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

]

回溯問題。三要素。dfs+剪枝。

路徑:已經加入的數字。

選擇列表:還能選擇加入的數字。

結束條件:sum==target;sum > target。

這種寫法還能繼續優化,比如2,2,2,2 > 7,則後續的2223,2226,2227都可以不用進入函式,直接跳出。

public list

>

combinationsum

(int

candidates,

int target)

if(candidates == null || candidates.length ==

0|| target ==0)

process

(candidates, target, lists,0,

newarraylist

<

>()

,0);

return lists;

}public

void

process

(int

candidates,

int target, list

> lists,

int sum, list

list,

int i)

if(sum == target)

//這裡還能繼續優化,比如2222超出,後面就不用再繼續2223,2226,因為必然超出

for(

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

)}

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