141 - 39 组合总和

题目

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。

  • 解集不能包含重复的组合。

示例 1:

输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ]

示例 2:

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

解答

解法1

https://leetcode-cn.com/problems/combination-sum/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-2/arrow-up-right

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        if len(candidates) == 0:
            return []
        res = []
        path = []
        candidates.sort()

        def helper(candidates, begin, target):
            if target == 0:
                res.append(path[:])
            for index in range(begin, len(candidates)):
                residue = target - candidates[index]
                if residue < 0:
                    break
                path.append(candidates[index])
                helper(candidates, index, residue)
                path.pop()

        helper(candidates, 0, target)
        return res

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

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

Runtime: 76 ms, faster than 64.33% of JavaScript online submissions for Combination Sum.

Memory Usage: 36.7 MB, less than 66.67% of JavaScript online submissions for Combination Sum.

Runtime: 4 ms, faster than 87.04% of Go online submissions for Combination Sum.

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

解法2

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

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

Last updated