• 39. 组合总和


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

    candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。 

    对于给定的输入,保证和为 target 的唯一组合数少于 150 个。

    示例 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]]
    示例 3:

    输入: candidates = [2], target = 1
    输出: []
    示例 4:

    输入: candidates = [1], target = 1
    输出: [[1]]
    示例 5:

    输入: candidates = [1], target = 2
    输出: [[1,1]]
     

    提示:

    1 <= candidates.length <= 30
    1 <= candidates[i] <= 200
    candidate 中的每个元素都是独一无二的。
    1 <= target <= 500

    回溯 + 剪枝 + 排序

    注: 对于这类寻找所有可行解的题,我们都可以尝试用「搜索回溯」的方法来解决。

    class Solution:
        def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
            # 回溯 + 剪枝
            def dfs(candidates, res, path, target, begin, end): # begin-end 0-l
                if target == 0:
                    res.append(path)
                    return
                # elif target < 0:
                #     return
                
                for i in range(begin, end):
                    if (target - candidates[i] < 0): #  剪枝
                        break
                    dfs(candidates, res, path + [candidates[i]], target - candidates[i], i, end)
    
            l = len(candidates)
            res = []
            candidates.sort()
            dfs(candidates, res, [], target, 0, l)
            return res
  • 相关阅读:
    Spring 09 : AOP实例
    Spring08 AOP概念
    Spring 07 : 动态代理
    Spring06 Spring+Junit
    Spring05 : 基于注解的IOC
    Spring03 : 依赖注入
    jupyter修改python核(使用不同的python虚拟环境)
    线性代数的本质——引入几何视角
    图像的去雾与加雾
    从MATLAB看一个IDE应该具有的素质
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/15468641.html
Copyright © 2020-2023  润新知