zoukankan      html  css  js  c++  java
  • leetcode第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]
    ]

    解题思路:
    先排序,然后递归求解
    代码如下:
    class Solution:
        def Solver(self, res, path, candidates, target, idx):
            for i in range(idx, len(candidates)):
                new_target = target - candidates[i]
                if new_target < 0:
                    return
                else:
                    if new_target == 0:
                        res.append(path + [candidates[i]])
                    else:
                        self.Solver(res, path + [candidates[i]], candidates,
                                    new_target, i)
    
        def combinationSum(self, candidates, target):
            """
            :type candidates: List[int]
            :type target: int
            :rtype: List[List[int]]
            """
            path = []
            res = []
            candidates = sorted(candidates)
            self.Solver(res, path, candidates, target, 0)
            return res
  • 相关阅读:
    C语言本身并不提供输入输出语句
    大数据
    kdd cup 论文
    决策树比较
    推荐系统
    geohash
    MySQLdb 安装
    天池大数据比赛
    逻辑回归
    矩阵分解
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/10152867.html
Copyright © 2011-2022 走看看