演算法 組合總和 II

2021-10-09 08:37:18 字數 1342 閱讀 5236

題目

給定乙個陣列 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...