原題鏈結
給定乙個無重複元素的陣列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...