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