首页 > 其他分享 >面试题08. 06 汉诺塔

面试题08. 06 汉诺塔

时间:2023-01-05 19:00:25浏览次数:34  
标签:面试题 06 递归 递归函数 self handler 汉诺塔 盘子

问题链接

https://leetcode.cn/problems/hanota-lcci/description/

解题思路

首先我们要定义递归函数。汉诺塔问题是典型的递归问题(缩小规模,小规模问题是大规模问题的子集),而且是典型的递归的定义就是递归的解的问题。

首先,我们定义一个汉诺塔函数,参数为 当前要处理的盘子数n, A盘子,B盘子和C盘子。

然后,我们定义递归函数的边界条件。如果n为1,则A柱子可以直接把盘子挪到C柱子上,而不用借助B柱子。

最后,我们定义本层应该做什么。

如果n不为1,我们需要:

  1. A借助C,把n-1个盘子挪动到B上。
  2. A直接把盘子挪动到C上。
  3. B借助A,把n-1个盘子挪动到C上。

初学者可能会疑问,A借助C怎么把n-1个挪到B上?那是递归函数要考虑的,不是你要考虑的。你只要记住,递归的定义就是递归的解,解是怎么出来的,递归函数自己清楚。

代码

class Solution:
    def hanota(self, A: List[int], B: List[int], C: List[int]) -> None:
        self.handler(len(A), A, B, C)
    def handler(self, n, A, B, C):
        if n == 1:
            C.append(A.pop())
        else:
            self.handler(n-1, A, C, B)
            self.handler(1, A, B, C)
            self.handler(n-1, B, A, C)

 

标签:面试题,06,递归,递归函数,self,handler,汉诺塔,盘子
From: https://www.cnblogs.com/bjfu-vth/p/17028636.html

相关文章

  • NC20684 wpy的请求
    题目链接题目题目描述“题目名称只是吸引你来做题的啦,其实和题目没什么卵关系:o(* ̄▽ ̄*)o”——历史——殿堂wpy移情别恋啦,他不喜欢spfa了,现在他喜欢使用dij,但是他又发......
  • 看完了108份面试题,我为你总结出了这 10 个【Hive】高频考点(建议收藏)
    前言        之前听CSDN头牌博主@沉默王二说过一句话,我觉得十分在理:处在互联网时代,是一种幸福,因为各式各样的信息非常容易触达,如果掌握了信息筛选的能力,就真的......
  • 接口测试常见面试题
    为什么要做接口测试?如下图一个提现功能比如这个输入框,平常拿到这个web页面,会对输入框做用例设计:输入一个负数(如:-100),点提交输入金额为0(如:0),点提交输入金额为0-100的数......
  • Day 06 Express
    初识Express一、什么是Express基于Node.js平台的Web开发框架,作用与Node.js内置的http模块类似,专门用来创建Web服务器本质:是Node.js的一个第三方包,提供了快速创建Web服......
  • 校招前端一面必会vue面试题指南
    写过自定义指令吗?原理是什么回答范例Vue有一组默认指令,比如v-model或v-for,同时Vue也允许用户注册自定义指令来扩展Vue能力自定义指令主要完成一些可复用低层级DOM操......
  • 校招前端二面常考react面试题(边面边更)
    高阶组件高阶函数:如果一个函数接受一个或多个函数作为参数或者返回一个函数就可称之为高阶函数。高阶组件:如果一个函数接受一个或多个组件作为参数并且返回一个组件就......
  • 前端一面常考react面试题
    类组件(Classcomponent)和函数式组件(Functionalcomponent)之间有何不同类组件不仅允许你使用更多额外的功能,如组件自身的状态和生命周期钩子,也能使组件直接访问store......
  • Day 06 模块加载机制
    模块加载机制一、优先从缓存中加载模块在第一次加载后会被缓存,多次调用require()不会导致模块的代码被执行多次不论内置模块、自定义模块、第三方模块都会从缓存中加载......
  • Java面试题Day02
    11.this和super的区别?this指向的是自身的一个对象,代表对象本身,super指向的是自己的一个超类对象,这个超类对象是最近的一个父类.this()调用的是本类其他构造方法,supe......
  • CF1060H - Sophisticated Device
    题意输入给定常数\(d,p\)。有\(5000\)个内存块,初始时\(1\)的值为\(x\),\(2\)的值为\(y\),其余的值为\(1\)。你有三种操作:+abc:将\(a\)内存块和\(b\)内存......