当前位置: 首页 > 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时,即当是叶子结点时就返回

代码编写:

相关文章:

  • 编译原理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
  • 目标跟踪相关综述文章
  • 震荡指标工具
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 华东政法与复旦上医签署合作框架协议,医学与法学如何交叉融合?
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 七部门:进一步增强资本市场对于科技创新企业的支持力度
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 从《让·桑特伊》到《追忆》,假故事的胜利