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

组合问题(二叉树,递归,回溯算法)

77. 组合 - 力扣(LeetCode)

class Solution {
private:vector<vector<int>>result;vector<int>path;void backstracking(int n,int k,int startIndex){if(path.size()==k){result.push_back(path);return;}for(int i=startIndex;i<=n;i++){path.push_back(i);backstracking(n,k,i+1);path.pop_back();}}
public:vector<vector<int>> combine(int n, int k) {backstracking(n,k,1);return result;}
};

在去组合数的过程可以理解为类似于二叉树形式的表现:

 在组合数的情况下,选择前序遍历。

为了防止重复(出现12,21)这种情况,定义一个startIndex储存遍历到数字,之后值遍历这个数字之后的数。

终止条件:在每一次遍历到叶子节点时,path数组的大小为定义的k值,则将这次遍历到达数组push进结果数组。由于遍历到底,所以要返回到上一层递归。

单层递归逻辑:从startIndex后循环遍历,将每一个循环到的值push进path数组中(path数组专门存放每一个叶子节点),递归函数,向下递归,startIndex的值也向下加一,每次函数循环结束时,还应将刚加进去的数pop出去,向前回溯,这样才能取全所有情况,如果不回溯,下一次循环的i值就会加入path数组中。

http://www.xdnf.cn/news/5550.html

相关文章:

  • 48.辐射发射RE和传导发射CE测试方法分析
  • 利用仓颉语言实现一个正整数中数字出现的频次统计
  • 【洛谷P3386】二分图最大匹配之Kuhn算法/匈牙利算法:直观理解
  • AI知识点 | 大模型技术演变
  • 细说getOutputStream()方法
  • 代码随想录笔记---回溯篇
  • libcurl简单使用
  • SpringBoot 整合 Langchain4j 构建AI智能体应用
  • 《异常链机制详解:如何优雅地传递Java中的错误信息?》
  • 【RP2350】香瓜树莓派RP2350之USB虚拟串口
  • windows下安装python软件
  • Linux计划任务与进程
  • 【RP2350】香瓜树莓派RP2350之LED
  • 数字孪生概念
  • 本机的驱动
  • RoPE(旋转位置编码,参考:DeepSeek-V2)
  • Linux进程9-无名管道:1.概述、创建、读写数据、2.进程间通信、3.读写规律、4.fcntl设置阻塞、5.文件描述符概述及复制函数dup,dup2
  • Robot之VideoMimic:《Visual Imitation Enables Contextual Humanoid Control》翻译与解读
  • 安卓系统APP:志愿填报(基于Android平台的志愿填报程序)
  • LVGL环形加载器
  • Linux开机后启动Oracle数据库
  • redis数据结构-06(LRANGE、LINDEX、LSET、LREM)
  • 数字化工厂中央控制室驾驶舱系统架构文档
  • Transformer LLM
  • Linux数据库篇、第零章_MySQL30周年庆典活动
  • 关于chatshare.xyz激活码使用说明和渠道指南!
  • 3D虚拟工厂vue3+three.js
  • Babel 深度解析:现代 JavaScript 开发的桥梁
  • @RequestParam @RequestHeader @RequestBody 三者详解
  • 【英语笔记(四)】诠释所有16种英语时态,介绍每种时态下的动词变形!!含有所有时态的的动词变形汇总表格