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

中的每个数字在每个组合中只能使用一次。

说明:

所有数字(包括目标数)都是正整数。解集不能包含重复的组合。

示例 1:

输入:candidates = [10,1,2,7,6,1,5],target =

8,

所求解集为:

[

[1,7],

[1,2, 5],

[2,6],

[1,1, 6]

]

解决方案:

这道题的主要注意事项是一次组合中不能重复使用一个数字,与之区别开的另外一道题可参考力扣“组合总和1”题目。

这道题还是是一道较为基础的回溯算法题,根据回溯算法固有规律,我们可以将其看作是一种探索法。

先对candidates进行一个排序,创建一个result列表,储存得到的结果,用于最后输出。然后从第一个数开始尝试,回溯条件为当combination即当前相加和大于target时,就回到上一步;如果combination等于target,便存入result中并且继续回溯,直到结束。

这里值得注意的一个操作是剪枝,及不让元素被重复选取。直接上代码:

for i in range(index,lenth-1): if i>index and

candidates[i] == candidates[i-1]: continue

详细的更多剪枝细节可以深入探究。

Python代码:

def combinationSum2(candidates, target): result = []

candidates.sort() lenth = len(candidates) if lenth == 0: return [] def

backtrack2(sums,index,combination): if sums > target: return if sums ==

target: result.append(combination) if sums < target: for i in

range(index,lenth-1): if i>index and candidates[i] == candidates[i-1]:

continue backtrack2(sums+candidates[i],i+1,combination+[candidates[i]])

backtrack2(0,-1,[]) return result

结语

回溯算法其实是一个架子,我们只需要根据题目的相应情况来调整回溯的条件与跳出的条件,相当于是套公式。只需要记住“公式”,理解算法思路,便可以用来轻松解题。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

python可以做力扣的题吗_Python之中力扣之组合总和相关推荐

  1. python tkinter做的生成计算题的GUI

    前言 提示:把前段时间做的一个训练小朋友计算能力的python小程序做了一个封装GUI,使用起来非常方便,题海战术可以大幅度提升小朋友的计算能力,目前做好了小数正负数整数的程序,欢迎大家探讨. 一.代 ...

  2. 【力扣刷题——字符串】附力扣链接、题目描述、解题方法及代码(344、541、剑指Offer05、151、剑指 Offer58、28、459)后续再补充

  3. python第五章课后编程题答案_Python核心编程-第五章课后习题

    5-1 整形 讲讲 Python 普通整型和长整型的区别 答:在2.7版本基本淡化了区别.真要区分的话,普通整型是32位或者64位,而长整型只与PC内存有关,很大就是了 5-2 运算符 (a) 写一个 ...

  4. python怎么做软件开发有前途吗_Python程序员就业行情以及前景分析

    最近Python大热,就想要分析一下相关的市场需求,看一下Python到底集中在哪些城市,企业对Python工程师的一些需求到底是怎样的,基于此,爬取了国内某招聘平台的相关数据,获取到30000+条相 ...

  5. python能做什么有趣的事作文_Python怎么学之小学生作文

    现在,解决python 怎么学的问题,是非常非常重要的. 所以, python 怎么学,发生了会如何,不发生又会如何. 邓拓曾经说过,越是没有本领的就越加自命不凡.带着这句话,我们还要更加慎重的审视这 ...

  6. python大学教程吕云翔课后题答案_python大学教程吕云翔.ppt

    第五章 Python 数据结构 列表 ? 列表:类似于 C 语言中的数组概念,一个列表中可以包含任意个数据, 每一个数据称为元素. Python 允许同一个列表中元素的数据类型不同, 可以是整数.字符 ...

  7. 用python可以做什么有趣的事作文_Python还能做这么有趣的事情!

    我:小哥哥,python能不能干点有趣的事情鸭? 惨绿青年:当然了,emmm--我想一下.诶,我记得python可以用来制作字符画. 我:字符画是什么东东鸭? 惨绿青年:我们平时看到的图片是由很多个不 ...

  8. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  9. 力扣刷题——双数之和

    很多人去力扣刷题都是数组的第一题,也就是双数之和,相信这也是很多人劝退题目,甚至对自己学过的知识产生了怀疑,这真的是我学完C语言,Java,Python或C++之后能做出来的题目吗?直接劝退了很多人, ...

最新文章

  1. 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
  2. 用js实现统计字符串里面的出现次数最多的字符
  3. [html] 使用button当按钮和使用div当按钮有什么区别?
  4. 带你自学Python系列(五):Python解决列表字符不区分大小写问题
  5. vue 中获取select 的option的value 直接click?
  6. 201809-1 卖菜
  7. python3 shell,python3执行shell命令
  8. 详细设计的工具——程序流程图
  9. 88.合并两个有序数组
  10. matlab 密集,matlab – 全局和parfor
  11. 华为2019数字芯片岗笔试解析(多选部分)
  12. 性能优化-service进程防杀
  13. MysQL索引与事务
  14. 程序员浪漫表白小程序
  15. 2018年5月28日 情绪、信念与身体 总得写点什么
  16. 2016年中考计算机考试模拟试题,2016年计算机三级考试模拟试题(含答案)
  17. orcal根据身份证获取年龄
  18. HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现
  19. 计算机相关装备有哪些,DNF装备搭配计算器_官方网站_17173DNF专区_17173.com中国游戏门户站...
  20. 【JAVA】500勇士问题,杀掉第三个人

热门文章

  1. iOS 音视频之网络视频播放AVPlayerViewController(iOS8.0+使用)
  2. 电脑工作者保护自己的眼睛
  3. 数据链路层的三个基本问题——封装成帧、透明传输和差错检测
  4. Python——雅克比迭代求线性方程组的根
  5. 10个顶级商业思维_9个启发 | 如何用设计思维解决商业难题
  6. win server无法安装无线网卡驱动
  7. 大数据在各个行业的应用_大数据应用:大数据应用的七大领域
  8. 【已解决】Could not find a declaration file for module ‘xxx‘. vue + ts
  9. win10调节屏幕亮度_小米10首创双光线感应器,屏幕亮度调节更加智能和人性化...
  10. python自动化控制脚本