目录
题目描述
给定一个候选人编号的集合 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合
样例
代码
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
candidates.sort()
result = []
def search(start , curr , remain):
for i in range(start ,len(candidates)):
c = candidates[i]
if i > start and candidates[i-1] == candidates[i]:
continue
if c == remain:
result.append(curr + [c])
return
if c < remain:
search(i + 1 , curr + [c] , remain - c)
if c > remain:
return
search(0 , [] , target)
return result
解题思路
与39.思路大致相仿,在递归调用函数的过程中再找到相同数字可以跳过,这样可以避免生成重复解,因为整个递归过程都有它们各自作为第一个数字的时候,作为非第一个数字的时候相同数字就可以跳过。