当前位置: 首页 > news >正文

[leetcode]216_组合总和III_给定数字范围且输出无重复

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。
示例 2:
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。
示例 3:
输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。
提示:
2 <= k <= 9
1 <= n <= 60

解题思路:【回溯】

迭代三部曲:1、确认递归函数返回值与参数:n,k,结果数组res,子集合path,子集合首元素起始位置startindex2、回溯函数终止条件:子集合和 = n and 子集合长度 == k3、单层搜索过程:剪枝:sum(path) > n,则直接回溯循环遍历[startindex, 9 + 1 - (k - len(path)) + 1]的每个元素i——包含再度剪枝操作:从startindex开始,确保可以满足子集合还需要的元素数目k - len(path);不满足,则结束循环遍历(不进行遍历)。path.append(i),再递归遍历子集合下一元素startindex + 1;若子集合的遍历终止,则回溯path.pop(),遍历下一个元素i + 1。

类似博文:[leetcode]77_组合-CSDN博客


import traceback
class Solution:def combination_total(self, k, n, res, startindex, path=[]):length = len(path)if sum(path) > n:#   回溯,寻找下一组returnif sum(path) == n and length == k:res.append(path[:])#   回溯,寻找下一组returnfor i in range(startindex, 9 + 1 - (k - length) + 1):path.append(i)self.combination_total(k, n, res, i + 1, path)#   回溯path.pop()if __name__ == '__main__':try:k, n = map(int, input().split())res = []solution = Solution()solution.combination_total(k, n, res, 1)print(res)except Exception as e:traceback.print_exc()

仅作为代码记录,方便自学自查自纠

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uni-app - - - - - 实现锚点定位和滚动监听功能(滚动监听功能暂未添加,待后续更新)
  • 后端Java-SpringBoot整合MyBatisPlus步骤(超详细)
  • ubuntu下载安装部署docker,ubuntu下载最新的docker
  • vue3.0 + element plus 全局自定义指令:select滚动分页
  • 第一弹:llama.cpp编译
  • 4.5 了解大数据处理基本流程
  • EP33 评分接口和已评分状态
  • 2、.Net 前端框架:Blazor - .Net宣传系列文章
  • Rainbond 助力城建智控,从传统开发到敏捷开发转型
  • memset函数
  • 【CSS】背景
  • 【C++】C++17中可以存储任意类型数据的对象——any类的使用与设计思想
  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • C++中vector类的使用
  • Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular 4.x 动态创建组件
  • Apache Zeppelin在Apache Trafodion上的可视化
  • const let
  • happypack两次报错的问题
  • HTTP 简介
  • Java反射-动态类加载和重新加载
  • React-生命周期杂记
  • swift基础之_对象 实例方法 对象方法。
  • vagrant 添加本地 box 安装 laravel homestead
  • 区块链分支循环
  • 区块链共识机制优缺点对比都是什么
  • 算法-插入排序
  • 无服务器化是企业 IT 架构的未来吗?
  • 译有关态射的一切
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 7行Python代码的人脸识别
  • raise 与 raise ... from 的区别
  • #stm32整理(一)flash读写
  • (+4)2.2UML建模图
  • (arch)linux 转换文件编码格式
  • (C++20) consteval立即函数
  • (C语言)二分查找 超详细
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (未解决)macOS matplotlib 中文是方框
  • .dwp和.webpart的区别
  • .md即markdown文件的基本常用编写语法
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net分布式压力测试工具(Beetle.DT)
  • .Net接口调试与案例
  • .net经典笔试题
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • /etc/fstab和/etc/mtab的区别
  • /run/containerd/containerd.sock connect: connection refused
  • @font-face 用字体画图标
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解