題目
給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的每個數字在每個組合中只能使用一次。
說明:
所有數字(包括目標數)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]所以在上一道題解(的基礎上,加入兩點即可,1,遞迴的時候,向後一位。2,剔除重複元素。
**
class
solution
:def
combinationsum2
(self, candidates: list[
int]
, target:
int)
-> list[list[
int]]:
res =
temp =
src = candidates[:]
src.sort(
)def
fun(src,target)
: size =
len(src)
for i in
range
(size)
: item = src[i]
if itemfun(src[i+1:
],target-item)
temp.pop(
)elif item==target:
if temp not
in res::]
)else
:pass
res_middle =
temp.pop(
)elif item>target:
continue
fun(src,target)
return res
if __name__ ==
'__main__'
: candidates =[2
,5,2
,1,2
] target =
5 res = solution(
).combinationsum2(candidates,target)
print
(res)
組合總和 II(剪枝演算法)
ps 做這道題之前需要先明白 組合總和 給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。...
組合總和II
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...
組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...