[leetcode] 40. Combination Sum II

题目

Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.

Each number in candidates may only be used once in the combination.

Note: The solution set must not contain duplicate combinations.

Example 1:

Input: candidates = [10,1,2,7,6,1,5], target = 8
Output: 
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

Example 2:

Input: candidates = [2,5,2,1,2], target = 5
Output: 
[
[1,2,2],
[5]
]

Constraints:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

思路

dfs,注意需要删除重复的排列,当检测到当前元素和前一元素相同且非遍历的第一个元素时则跳过。

代码

python版本:

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        candidates = sorted(candidates)
        res = []

        def dfs(n, path, target):
            if target < 0:
                return
            if target == 0:
                res.append(path)
                return
            for i in range(n+1, len(candidates)):
                if i > n+1 and candidates[i] == candidates[i-1]:
                    continue
                dfs(i, path+[candidates[i]], target-candidates[i])
        dfs(-1, [], target)
        return res

posted @ 2022-03-30 15:14  frankming  阅读(23)  评论(0编辑  收藏  举报