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

leetcode:面试题 08.06. 汉诺塔问题

题目链接

        面试题 08.06. 汉诺塔问题

题目描述

题目解析

  1. 当只有一个盘子时:直接从A柱放到C柱即可。
  2. 当有两个盘子时:将A柱第一个盘子先放到B柱,再将A柱第二个盘子放到C柱,最后将B柱上的盘子放到C柱子。
  3. 当有3个盘子时:先A柱上面两个盘子借助C柱放到B柱子,再将A柱上最后一个盘子放入C柱,最后将B柱子上的盘子借助A柱放入C柱。
  4. 当有n个盘子时:先A柱上n-1个盘子借助C柱放到B柱子,再将A柱上最后一个盘子放入C柱,最后将B柱子上的盘子借助A柱放入C柱。

解法1:纯递归

// 方法一:纯递归
// my_hanota:将A柱子中最上面的n个盘子经由B移动到C中;也就是将A中后n个元素经由B移动到C中。
void my_hanota(int n, vector<int>& A, vector<int>& B, vector<int>& C) {if (n == 1){C.push_back(A.back());  A.pop_back();return;}my_hanota(n - 1, A, C, B);C.push_back(A.back());  A.pop_back();my_hanota(n - 1, B, A, C);
}
void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {int n = A.size();my_hanota(n, A, B, C);
}

解法2:体会参数的递归过程

// 方法二:强迫使用一个参数,简单换一种递归思考方式
// m参数用于体验递归过程
// 用m表示最大的盘子在数组中的位置
void my_hanota(int n, int m, vector<int>& A, vector<int>& B, vector<int>& C)
{if (n == 1){C[m] = A[m];return;}my_hanota(n - 1, m + 1, A, C, B);//将A中后n-1个元素经由C放入BC[m] = A[m];my_hanota(n - 1, m + 1, B, A, C);
}
void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {int n = A.size();B.resize(n);C.resize(n);int m = 0;my_hanota(n, 0, A, B, C);
}

相关文章:

  • Linux->进程概念(精讲)
  • Golang 中接口嵌套的详细说明和使用示例
  • K8s入门指南:架构解析浓缩版与服务间调用实战演示
  • GetX 实现 MVVM 架构, 高效 路由管理 和 状态管理
  • Maven生命周期,测试
  • Oracle导入导出 exp命令和imp命令 expdp命令和impdp命令 19c导出兼容11g版本的dmp然后使用11g导入dmp
  • 算法-动态规划-钢条切割问题
  • Python商务数据分析——Python 入门基础知识学习笔记
  • 零基础学习Redis(14) -- Spring中使用Redis
  • Go语言--语法基础6--基本数据类型--数组类型(1)
  • 为OneCode 开发TRea 开发插件,从环境搭建到生态融合
  • 跨域问题说明
  • 开发语言本身只是提供了一种解决问题的工具
  • 给docker 配置代理 IP机端口
  • Java事务失效(面试题)的常见场景
  • Python 商务数据分析—— NumPy 学习笔记Ⅱ
  • 登录拦截功能实现 -瑞吉外卖笔记
  • 2025年EAAI SCI1区TOP,基于低差异序列的仿果蝇无人机地下环境路径规划算法,深度解析+性能实测
  • 群晖 NAS Docker 镜像加速配置详细教程
  • SpringBean 创建过程详解
  • 海南网站建设开发/小程序运营推广公司
  • html5做个网站多少钱/成年培训班有哪些
  • 2017网站建设报价方案/百度搜索图片
  • 网站建设目的分析/虎扑体育网体育
  • 昆山专业网站建设公司哪家好/百度在西安有分公司吗
  • 武汉网站建设哪家好/深圳最新疫情