更多精彩内容,请关注【力扣中等题】。

题目

难度:★★★☆☆

类型:数组

方法:回溯法

给定一个无重复元素的数组 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:回溯法

我们使用回溯法解决这道题。回溯法的思想是如果不合适,就退回上一步。

我们写一个函数helper,用来实现回溯操作。

输入参数

当前要考察的元素所在的下标(index);

加到当前为止的和(cur_sum);

临时列表(cur_list),用来记录组成当前和cur_sum所使用过的所有加数;

操作流程

判断操作是否合法,用来限制操作次数,有两个判断条件:

(1)当前考察的元素所在下标i是否合法,是否出现越界;

(2)当前为止的和cur_sum是否已经超过目标值target,如果已经超过,则没有必要再进行操作。

判断是否已经满足条件,即cur_sum是否已经等于目标值target,如果已经相等,则把组成cur_sum的各个加数cur_list加入到结果列表res中。

考察在当前和cur_sum中加入当前元素candidates[index]的情况,即:helper(index, cur_sum+candidates[index], cur_list+[candidates[index]])。

考察在当前和cur_sum中不加入当前元素的情况,即跳过当前元素,考察下一个元素:

helper(index+1, cur_sum, cur_list)。

回溯法的精髓在于步骤3和步骤4,可以遍历到所有可能的组合情况。有关回溯法的讲解与更多题目,请移步【回溯法综述】

注,这里可以不使用排序,因为数组中的元素是没有重复的。

class Solution:

def combinationSum(self, candidates, target):

"""

:param candidates: List[int]

:param target: int

:return:

"""

def helper(index, cur_sum, cur_list):

"""

:param i: 当前考察的元素

:param cur_sum: 当前和

:param cur_list: 获得cur_sum所用的元素

:return:

"""

# 跳出循环的条件

if cur_sum > target or index == len(candidates):

return

# 如果找到符合条件的子数组,则添加到结果中

if cur_sum == target:

res.append(cur_list)

return

# 考虑当前元素candidates[i]

helper(index, cur_sum + candidates[i], cur_list + [candidates[i]])

# 不考虑当前元素

helper(index+1, cur_sum, cur_list)

candidates.sort()

res = []

helper(0, 0, [])

return res

如有疑问或建议,欢迎评论区留言~

python 组合求和_39. 组合总和(Python)相关推荐

  1. python组合求和-近似值

    <excel吧提问-同类商品找出几个和最接近且不能小于目标值的>,正好之前python写过类似组合求和的代码<python组合求和> 可以分别查找大于等于.小于等于.绝对值最近 ...

  2. python组合求和

    改进<python从数组中找出所有和为M的组合>,使用python排列组合itertools模块combinations函数,并使用openpyxl模块从Excel中读取数据.写入计算结果 ...

  3. Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴、使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率

    Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴.使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率 ...

  4. python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR-阿里云开发者社区...

    1. 资产组合VaR建模方法回顾 文章中总结了通过DCC模型估计组合向前一日VaR的方法,整体思路如下: ●  通过Garch族模型估计各资产的波动率 ●  通过DCC模型估计各资产间的相关系数,结合 ...

  5. 组合赋权法之python

    目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...

  6. python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR

    作者:量化小白H     Python爱好者社区专栏作者 个人公众号:量化小白上分记 前文传送门: 之前总结的大部分模型都是基于正态性的假设,但实际上,正态性假设并不非常符合金融时间序列的特征.如果从 ...

  7. python关于组合数据类型_python组合数据类型

    <python组合数据类型>由会员分享,可在线阅读,更多相关<python组合数据类型(73页珍藏版)>请在人人文库网上搜索. 1.Python语言程序设计,第6章 组合数据类 ...

  8. python中继承和组合的区别_Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类...

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  9. python关于递归求组合与组合数-通过阶乘, fibonacci加深对递归的理解

    python关于递归求组合与组合数: 首先需要找到递归的突破口. 要求如下: Exercise 3: Enumerating Combinations You need to write a func ...

  10. python生成排列组合_Python 排列组合生成

    zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...

最新文章

  1. ​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势
  2. 如何从“查找”中排除所有“拒绝权限”消息?
  3. Asp.net MVC开发RDLC报表
  4. 计算机科学与技术专家报告内容,计算机科学与技术专业设计报告大学内容.docx...
  5. java版b2b2c社交电商spring cloud分布式微服务(二) 服务消费者(rest+ribbon)
  6. GHOSTXP_SP3电脑公司快速安装机版V2013
  7. mysql客户端修改sqlmode_MySQL修改sql_mode
  8. 飞鸽传书 再次报道,回到90年代中期的业界
  9. 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
  10. Ubuntu Hudson 安装配置
  11. UILabel显示html文本
  12. 移动硬盘遇到无法访问,文件或目录损坏且无法读取的解决办法
  13. 再战双十一,阿里这回真的“上天”了!
  14. 【gev】 Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
  15. 今日头条适配方案_ 今日头条大改版,小程序强势登场
  16. mycat启动报错:but failed to start(个例)
  17. Java SE 部分基础知识
  18. python26章_44G-26章节Python盖世修炼最新实战 全新升级版Python全栈架构师高级课程 从零实战...
  19. QT5百度地图开发学习——qt调用JavaScript函数并传参
  20. Random Thoughts #12 @2013:P2P狂想曲

热门文章

  1. C++ - 操作运算符
  2. 《DB 查询分析器》使用技巧之(七)
  3. ASP导出到Excel
  4. 【LeetCode】【数组】题号:628,三个数组成的乘积最大
  5. 实习成长之路:面试官说的MySQL高可用-------主备一致到底是什么?
  6. 动态的顺序表(C语言实现)
  7. 注释转换 (C语言注释转换为c++注释)
  8. Spring-02-AOP切面编程
  9. android AChartEnginee讲解之自定义图表类
  10. 安卓直播详细教程(一)-----bilibili开源播放器