python 组合求和_39. 组合总和(Python)
更多精彩内容,请关注【力扣中等题】。
题目
难度:★★★☆☆
类型:数组
方法:回溯法
给定一个无重复元素的数组 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)相关推荐
- python组合求和-近似值
<excel吧提问-同类商品找出几个和最接近且不能小于目标值的>,正好之前python写过类似组合求和的代码<python组合求和> 可以分别查找大于等于.小于等于.绝对值最近 ...
- python组合求和
改进<python从数组中找出所有和为M的组合>,使用python排列组合itertools模块combinations函数,并使用openpyxl模块从Excel中读取数据.写入计算结果 ...
- Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴、使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率
Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴.使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率 ...
- python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR-阿里云开发者社区...
1. 资产组合VaR建模方法回顾 文章中总结了通过DCC模型估计组合向前一日VaR的方法,整体思路如下: ● 通过Garch族模型估计各资产的波动率 ● 通过DCC模型估计各资产间的相关系数,结合 ...
- 组合赋权法之python
目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...
- python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR
作者:量化小白H Python爱好者社区专栏作者 个人公众号:量化小白上分记 前文传送门: 之前总结的大部分模型都是基于正态性的假设,但实际上,正态性假设并不非常符合金融时间序列的特征.如果从 ...
- python关于组合数据类型_python组合数据类型
<python组合数据类型>由会员分享,可在线阅读,更多相关<python组合数据类型(73页珍藏版)>请在人人文库网上搜索. 1.Python语言程序设计,第6章 组合数据类 ...
- python中继承和组合的区别_Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类...
一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...
- python关于递归求组合与组合数-通过阶乘, fibonacci加深对递归的理解
python关于递归求组合与组合数: 首先需要找到递归的突破口. 要求如下: Exercise 3: Enumerating Combinations You need to write a func ...
- python生成排列组合_Python 排列组合生成
zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...
最新文章
- ​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势
- 如何从“查找”中排除所有“拒绝权限”消息?
- Asp.net MVC开发RDLC报表
- 计算机科学与技术专家报告内容,计算机科学与技术专业设计报告大学内容.docx...
- java版b2b2c社交电商spring cloud分布式微服务(二) 服务消费者(rest+ribbon)
- GHOSTXP_SP3电脑公司快速安装机版V2013
- mysql客户端修改sqlmode_MySQL修改sql_mode
- 飞鸽传书 再次报道,回到90年代中期的业界
- 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
- Ubuntu Hudson 安装配置
- UILabel显示html文本
- 移动硬盘遇到无法访问,文件或目录损坏且无法读取的解决办法
- 再战双十一,阿里这回真的“上天”了!
- 【gev】 Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
- 今日头条适配方案_ 今日头条大改版,小程序强势登场
- mycat启动报错:but failed to start(个例)
- Java SE 部分基础知识
- python26章_44G-26章节Python盖世修炼最新实战 全新升级版Python全栈架构师高级课程 从零实战...
- QT5百度地图开发学习——qt调用JavaScript函数并传参
- Random Thoughts #12 @2013:P2P狂想曲