40. Combination Sum II (题目链接)
Medium
Given a collection of candidate numbers (candidates
) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
Each number in candidates
may only be used once in the combination.
Note:
- All numbers (including
target
) will be positive integers. - The solution set must not contain duplicate combinations.
Example 1:
Input: candidates =[10,1,2,7,6,1,5]
, target =8
, A solution set is: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
Example 2:
Input: candidates = [2,5,2,1,2], target = 5, A solution set is: [ [1,2,2], [5] ]
思路:dfs
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
rlt = []
candidates.sort()
def dfs(nums: List[int], cnt: int, start: int):
if cnt == target:
rlt.append(copy.deepcopy(nums))
return
for i in range(start, len(candidates)):
if cnt + candidates[i] > target:
return
if i > start and candidates[i - 1] == candidates[i]:
continue
nums.append(candidates[i])
dfs(nums, cnt + candidates[i], i + 1)
nums.pop()
dfs([], 0, 0)
return rlt