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

专题四:综合练习(组合问题的决策树与回溯算法)

以leetode77题为例

题目分析: 

给一个数字n,你可以在1到n中选k个数字进行组合,注意包括1和n,而且通过观察实例

1,2和2,1是一样的,所以我们画决策树的时候,只需要从当前位置往后列举

算法原理分析:

第一步:画决策树:越详细越好

代码设计:

1.全局变量:我需要一个vector<vector<int>>ret数组去搜集每个叶子节点

                     我需要一个path去标记路径,一旦到了叶子结点就放到ret中

                    还有一个是n+k-1,这个可以设计成dfs函数参数传递下去

2.dfs函数:dfs列举从当前位置开始往后,比如上一层已经罗列1,这一层就2开始

                  并且要传index++,标记罗列到什么为止,dfs(int pos,int index);

                  当path.size()==k时就是叶子结点

3.细节:回溯:恢复现场,返回上一层时需要pop

             剪枝:这里没必要,因为我通过index标记了每一层罗列到什么位置即可

             递归出口:path.size()==k时,即当是叶子结点时就返回

代码编写:

http://www.dtcms.com/a/196635.html

相关文章:

  • 编译原理7~9
  • 数据库实验报告 数据定义操作 3
  • Oracle 高水位线(High Water Mark, HWM)
  • 【数据结构】线性表--队列
  • Echart地图数据源获取
  • [前端高频]数组转树、数组扁平化、深拷贝、JSON.stringifyJSON.parse等手撕
  • 微波至X射线波段详解2025.5.17
  • EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型
  • 从零开始:使用 PyTorch 构建深度学习网络
  • 线性dp练习(碱基配对)
  • 计算机视觉与深度学习 | Python实现EMD-VMD-LSTM时间序列预测(完整源码和数据)
  • 系统架构设计(十):结构化编程
  • 【嵌入式DIY实例-Arduino篇】-OLED实现乒乓游戏
  • Windows 电脑中 MATLAB 安装常见问题及解决方案
  • 深入理解指针(6)
  • 【Linux网络】内网穿透
  • Java 面向对象进阶:抽象类与接口的舞蹈
  • 前端扫盲HTML
  • 目标跟踪相关综述文章
  • 震荡指标工具
  • 桌面端进程通信
  • 记录算法笔记(2025.5.17)验证二叉搜索树
  • 高效视频理解的临时移位模块(Temporal Shift Module)
  • 【LUT技术专题】针对降噪优化的通道感知轻量级LUT算法:DnLUT
  • AI Agent | Coze 插件使用指南:从功能解析到实操步骤
  • Linux 文件权限 (rwx) 详解
  • AI Agent开发第69课-彻底消除RAG知识库幻觉(3)-手撕“重排序”
  • React Fiber 架构深度解析:时间切片与性能优化的核心引擎
  • windows系统各版本下载
  • Vivado2024.2+Modelsim仿真环境搭建大全(保姆式说明)