40. 组合总和 II
class Solution(object):
def combinationSum2(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
def dfs(candidates, begin, end, path, res, target):
if target == 0:
res.append(path)
return
for i in range(begin, end):
if i > begin and candidates[i] == candidates[i-1]:
continue
if target - candidates[i] < 0:
break
dfs(candidates, i + 1, end, path + [candidates[i]], res, target - candidates[i])
n = len(candidates)
if n == 0:
return []
candidates.sort()
path = []
res = []
dfs(candidates, 0, n, path, res, target)
return res
思路:
与组合总和思路相同,只是跳过下一个相同开头的组合。