40组合总和II
题目:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。
说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。
来源:https://leetcode-cn.com/problems/combination-sum-ii/
法一:自己的代码
思路:与39组合总和最大的区别是每次回溯时遍历的数组不一样,39中由于数字可以重复使用,所以每次遍历的时候,总是从该数字开始,而40不一样,不可重复所以要加1,从下一个数字开始遍历.
class Solution:
def combinationSum(self, candidates, target: int):
candidates = sorted(candidates)
print(candidates)
results = []
def backtrack(a=[], candidates=candidates):
if sum(a) == target:
results.append(a)
return
for j,i in enumerate(candidates):
# 使用这个前提是要排序
# 画一个树状图便很容易看出,如果连续出现了两个相同的数,
# 第二个数再遍历有可能会和第一个数的遍历结果重复
if (j != 0) & (candidates[j] == candidates[j - 1]):
continue
if sum(a) + i <= target:
# 这里candidates[j+1:]是关键,根本原因是因为题中要求所给数组中的每个数字只可以使用一次
# 每次遍历的时候务必只遍历[j+1,)中的数,这样才能保证每个数字只使用一次,类似一往无前法,
# 如果j已经到达最大的索引了,说明这轮已经遍历完了,
# 传过去的是一个空的list,即下次遍历一个空list也不影响程序
backtrack(a + [i], candidates[j+1:])
# 如果大于了,后面的数也就不用遍历了,因为前面的数小后面的大,小的不行大的一定不行
else:
break
backtrack()
return results
if __name__ == "__main__":
duixiang = Solution()
# a = duixiang.combinationSum([1,1,2],4)
# print('u',a)
a = duixiang.combinationSum([2,5,3,1,2],5)
print('u',a)
40组合总和II的更多相关文章
- Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II)
Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使 ...
- Java实现 LeetCode 40 组合总和 II(二)
40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在 ...
- 40. 组合总和 II + 递归 + 回溯 + 记录路径
40. 组合总和 II LeetCode_40 题目描述 题解分析 此题和 39. 组合总和 + 递归 + 回溯 + 存储路径很像,只不过题目修改了一下. 题解的关键是首先将候选数组进行排序,然后记录 ...
- Leetcode题库——40.组合总和II
@author: ZZQ @software: PyCharm @file: combinationSum2.py @time: 2018/11/15 18:38 要求:给定一个数组 candidat ...
- 40. 组合总和 II leetcode JAVA
题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使 ...
- LeetCode 40. 组合总和 II(Combination Sum II)
题目描述 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能 ...
- leetcode 40. 组合总和 II (python)
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...
- 40. 组合总和 II
题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
- 组合总和 II
组合总和 II 题目介绍 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates ...
随机推荐
- laravel-admin 添加图表 Chartjs
github地址:https://github.com/laravel-admin-extensions/chartjs Installation composer require laravel-a ...
- 学习Linux的准备
学习方式: 主动学习: 动手实践:40% 讲给别人:70% 被动学习: 听课:10% 笔记:20% 写博客的要求: 写博客是对某一方面知识的总结,输出:是知识的书面化的表达方式.写博客不同于写笔记,笔 ...
- CentOS下phpMyAdmin安装
1.phpMyAdmin官网下载https://www.phpmyadmin.net/downloads/ 2.下载程序包 wget https://files.phpmyadmin.net/phpM ...
- Java异常类型
1.java.lang.IllegalArgumentException 非法数据异常 2.javax.mail.AuthenticationFailedException: 550 User ha ...
- alembic在tornado项目中的应用
在项目中引用alembic 协助tornado项目生成数据表结构 alembic revision --autogenerate -m "create tables" 第二步执行 ...
- selenium Error
点击下载对应版本的 chromedriver.exe Message: 'geckodriver' executable needs to be in PATH. 原因是没有配置chromedrive ...
- Idea 项目jdk环境配置
1.先配置jdk环境变量
- C# IIS域名绑定
C#解决IIS域名批量绑定: https://shiyousan.com/post/636022975388168065 C#程序控制IIS 添加站点域名绑定: https://blog.csdn.n ...
- ubuntu编译安装openssl
http://blog.bccn.net/%E9%9D%99%E5%A4%9C%E6%80%9D/66642 su root 不然权限不够 cd /usr/src wget https://www. ...
- httpclient+jsoup实现网页信息抓取
需求分析:抓取:http://tools.2345.com/rili.htm中的万年历(阳历.阴历等等). 1.首先为抓取的内容创建一个类.实现封装. package com.wan.domain; ...