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

<题海拾贝>[递归]1.汉诺塔

链接

面试题 08.06. 汉诺塔问题 - 力扣(LeetCode)

函数头设计–重复子问题

假设是a,b,c三个柱子,a上面有n个盘子

所以函数头要三个数组,还要知道这次a柱上面的盘子数size

所以函数头如下

void dfs(vector<int>& A, vector<int>& B, vector<int>& C,int size)

函数体设计–某个子问题

步骤:

  1. 把a的n-1个盘子借助c转移到b上
  2. 把a最底下的盘子转移到c盘子
  3. 把b的n-1个盘子借助a转移到c
dfs(A,C,B,size-1);C.push_back(A.back());
A.pop_back();dfs(B,A,C,size-1);

递归出口

a只剩最下面的盘子时,直接转移到c上面即可

代码实现

class Solution 
{
public:void dfs(vector<int>& A, vector<int>& B, vector<int>& C,int size){if(size==1){C.push_back(A.back());A.pop_back();return;}dfs(A,C,B,size-1);C.push_back(A.back());A.pop_back();dfs(B,A,C,size-1);}void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {dfs(A,B,C,A.size());}
};

相关文章:

  • PyCharm中 Fitten Code插件的使用说明一
  • 云计算——武汉理工期末复习
  • 迈向『闭环』| PlanAgent:基于MLLM的自动驾驶闭环规划新SOTA!
  • 【Python】(一)复习重点——控制流
  • 【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码
  • Nginx配置详细解释:(4)高级配置
  • 使用#sortablejs插件对表格中拖拽行排序#Vue3#后端接口数据
  • Linux用户,用户组,所有者权限分配,sftp用户权限分配
  • 问题 B: 2.左右(lr.cpp/pas)
  • C++:程序设计实例
  • 2024/06/11--代码随想录算法1/17|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • Spark的开发环境配置
  • LeakSearch:针对网络公开凭证的安全扫描与检测工具
  • 【设计模式】创建型设计模式之 建造者模式
  • 【机器学习】让计算机变得更加智能
  • 网络传输文件的问题
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • php ci框架整合银盛支付
  • Python学习笔记 字符串拼接
  • Terraform入门 - 3. 变更基础设施
  • 从零开始的无人驾驶 1
  • 基于webpack 的 vue 多页架构
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 深度学习入门:10门免费线上课程推荐
  • nb
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #DBA杂记1
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (js)循环条件满足时终止循环
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (小白学Java)Java简介和基本配置
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 常见的偏门问题
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET的数据绑定
  • .net与java建立WebService再互相调用
  • .NET中统一的存储过程调用方法(收藏)
  • @GetMapping和@RequestMapping的区别
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [Android Studio 权威教程]断点调试和高级调试
  • [ARM]ldr 和 adr 伪指令的区别
  • [Assignment] C++1
  • [C# WPF] 如何给控件添加边框(Border)?
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [iOS]iOS获取设备信息经常用法