题目:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:所有数字都是正整数。解集不能包含重复的组合。
示例 1:输入: k = 3, n = 7输出: [[1,2,4]]

来源:https://leetcode-cn.com/problems/combination-sum-iii/

法一:自己的代码

思路:同前两个题大同小异,只是剪枝条件不同而已,这个题里面明确要求了最后得到的数组的长度,这个条件实际上就是剪枝条件

from typing import List
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
results = []
nums = [r+1 for r in range(9)]
# a中存放生成的每个list, nums中存放用于遍历的数,
def backtrack(a=[], nums=nums,):
# 剪枝条件,如果长度不够,则不必判断和,直接进入下一次的遍历
if len(a) < k:
pass
# 如果满足条件,则长度一定是k,只要和是n就返回值,并且直接结束下一次的遍历
elif sum(a) == n:
print(a)
results.append(a)
return
for i,j in enumerate(nums):
# (len(a) < k),这个条件必须有,比如输入(2,18),如果没有这个条件,
# 就需要在上面的if语句中限制,这样限制更省时
if (sum(a) + j <= n) & (len(a) < k):
backtrack( a+[j], nums[i+1:])
# 如果if中有一个条件不满足,终止循环,因为nums中的数是由小到大排序的,
# 第n个数不满足的话,n+1个之后的一定不满足,直接终止循环
else:
break
backtrack()
return results
if __name__ == "__main__":
duixiang = Solution()
a = duixiang.combinationSum3(2, 18)
print('u', a)

最新文章

  1. zabbix的一些优化参数随笔
  2. Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
  3. ext树表+ZeroClipboard复制链接功能
  4. CodeForces - 427A (警察和罪犯 思维题)
  5. Windows系统文件受损的修复技巧
  6. 为 HTML 添加新元素
  7. UVa 10780 (质因数分解) Again Prime? No Time.
  8. jquery Loading图片延迟加载特效
  9. (DT系列二)device tree的书写规范
  10. 分享一个很好看的WPF界面
  11. 5天2亿活跃用户,QQ“LBS+AR”天降红包活动后台揭密
  12. 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)
  13. 产品经理聊产品--mac book pro 2018 初体验
  14. [HBase Manual] CH2 Getting Started
  15. linux基础之sed
  16. ARP【地址解析协议】理解
  17. 2012年蓝桥杯省赛A组c++第2题(暴力求解古堡算式)
  18. deeplearning.ai学习seq2seq模型
  19. 学习pl/sql之一
  20. java 连接数据库报错:Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value &#39;

热门文章

  1. shell 实用脚本
  2. Head First设计模式 1 设计模式入门 策略模式 观察者模式
  3. 基于Redis实现分布式锁(转载)
  4. js 设置多条css样式
  5. Acwing-100-IncDec序列(差分)
  6. Entity Framework Core 迁移命令
  7. AngularJS 前端 MVC 的设计与搭建
  8. Trie树(字典树)整理
  9. AtCoder AGC037D Sorting a Grid (二分图匹配)
  10. 微信小程序_(视图)简单的scroll-view容器