給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重複被選取。
說明:
示例 1:回溯問題。三要素。dfs+剪枝。輸入: 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]
]
路徑:已經加入的數字。
選擇列表:還能選擇加入的數字。
結束條件: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...