142 - 40 组合总和2

题目

给定一个数组 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] ]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5, 所求解集为: [ [1,2,2], [5] ]

解答

一样的回溯套路,需要跳过一下相同值,以及剪掉负数的分支

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        if not candidates:
            return []
        res = []
        tmp = []
        candidates.sort()

        def helper(begin, target, candidates):
            if target == 0:
                res.append(tmp[:])
            for i in range(begin, len(candidates)):
                if i > 0 and candidates[i] == candidates[i-1]:
                    continue
                diff = target - candidates[i]
                if diff < 0:
                    break
                tmp.append(candidates[i])
                newCand = candidates[:]
                newCand.pop(i)
                helper(i, diff, newCand)
                tmp.pop()
        helper(0, target, candidates)
        return res

Runtime: 48 ms, faster than 94.83% of Python3 online submissions for Combination Sum II.

Memory Usage: 12.7 MB, less than 100.00% of Python3 online submissions for Combination Sum II.

https://leetcode.com/problems/combination-sum-ii/discuss/259449/golang

Runtime: 0 ms, faster than 100.00% of Go online submissions for Combination Sum II.

Memory Usage: 2.8 MB, less than 100.00% of Go online submissions for Combination Sum II.

Runtime: 72 ms, faster than 68.74% of JavaScript online submissions for Combination Sum II.

Memory Usage: 37.3 MB, less than 20.00% of JavaScript online submissions for Combination Sum II.

Last updated

Was this helpful?