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

回溯---组合

题目:

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

思路:组合问题是回溯思想的典型应用,其本质就是穷举,可以根据题目进行剪枝优化操作。回溯是递归的产物,因此使用回溯思想解决的问题一定用到了递归。使用递归,就要按照递归三部曲进行分析。

第一步:确定参数与返回值。参数为n,k,startIndex(要遍历的数组的起始值)

第二步:确定终止条件。当结果中有k个数值时,将这个组合加入结果集,返回

第三步:确定单层递归逻辑。回溯法的搜索过程就是一个树形结构的遍历过程,for循环进行横向遍历,递归过程是纵向遍历。

for循环每次从startIndex开始,未剪枝时到n结束,进行剪枝优化到n-(k-path.size())+1结束。

代码:

    private List<List<Integer>> result=new ArrayList<>();//存放符合条件结果的集合private List<Integer> path=new ArrayList<>();//存放符合条件的结果public List<List<Integer>> combine(int n, int k) {backTracking(n,k,1);return result;}public void backTracking(int n,int k,int startIndex){if(path.size()==k){result.add(new ArrayList<>(path));return;}for(int i=startIndex;i<=n-(k-path.size())+1;i++){path.add(i);//处理节点backTracking(n,k,i+1);//递归path.remove(path.size()-1);//回溯}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Postman中的灾难恢复演练:API的弹性测试策略
  • 数据资产治理:以业务价值为驱动
  • TPAMI 2024 | 全新框架!深度学习可解释度量学习!
  • 【ffmpeg命令入门】分离音视频流
  • 四步实现网站HTTPS访问
  • HarmonyOs~ArkUI进阶 之 状态管理
  • Three.js投射光线实现三维物体交互
  • 抖音本地生活城市服务商骗局后,第三方本地生活系统源码部署持续火爆!
  • Pyqt5新手教程
  • 【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂
  • NSSRound#4 Team
  • C++初阶学习第三弹——类与对象(上)
  • vue的nextTick的作用
  • leetcode-136. 只出现一次的数字
  • C#中的异步编程:如何有效地使用async和await关键字以提高应用程序的性能和响应性
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • canvas 五子棋游戏
  • Django 博客开发教程 16 - 统计文章阅读量
  • Java,console输出实时的转向GUI textbox
  • Javascript Math对象和Date对象常用方法详解
  • python_bomb----数据类型总结
  • Redis字符串类型内部编码剖析
  • vue 配置sass、scss全局变量
  • windows下使用nginx调试简介
  • 记一次删除Git记录中的大文件的过程
  • 如何实现 font-size 的响应式
  • 什么是Javascript函数节流?
  • 使用SAX解析XML
  • kubernetes资源对象--ingress
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 函数计算新功能-----支持C#函数
  • # 数论-逆元
  • (12)Linux 常见的三种进程状态
  • (7)svelte 教程: Props(属性)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (搬运以学习)flask 上下文的实现
  • (二)fiber的基本认识
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十一)图像的罗伯特梯度锐化
  • ./和../以及/和~之间的区别
  • .NET 药厂业务系统 CPU爆高分析
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET文档生成工具ADB使用图文教程
  • .sdf和.msp文件读取
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • [22]. 括号生成
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AIGC] Java 和 Kotlin 的区别
  • [BZOJ 4598][Sdoi2016]模式字符串