首页 > 其他分享 >汉诺塔(面试)

汉诺塔(面试)

时间:2023-12-01 23:31:37浏览次数:28  
标签:柱子 hannuota 面试 汉诺塔 eval input 盘子

汉诺塔(递归算法)

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。

你需要原地修改栈。

要求:使用递归算法设计程序

示例1:

 输入

[2, 1, 0]

[]

[]

 输出

 [2, 1, 0]

解释:输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2, 1, 0]

示例2:

输入

[1, 0]

[]

[]

 输出

[1, 0]

解释: 输入:A = [1, 0], B = [], C = [] 输出:C = [1, 0]

def hannuota(n,A,B,C):
    if n == 1:
        C.append(A.pop())
    else:
        hannuota(n-1,A,C,B)
        C.append(A.pop())
        hannuota(n-1,B,A,C)
    return C
    
a = eval(input())
b = eval(input())
c = eval(input())
print(hannuota(len(a),a,b,c))

标签:柱子,hannuota,面试,汉诺塔,eval,input,盘子
From: https://blog.51cto.com/lizhao/8649635

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:奇偶链表
    题目给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是奇数,第二个节点的索引为偶数,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在O(1)的额外空间复杂......
  • #yyds干货盘点# LeetCode程序员面试金典:下一个更大元素 II
    题目给定一个循环数组nums(nums[nums.length-1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。 ......
  • #yyds干货盘点# LeetCode程序员面试金典:下一个更大元素 II
    题目给定一个循环数组nums(nums[nums.length-1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。 ......
  • 《力扣面试150题》题单拓展——滑动窗口
    《力扣面试150题》题单拓展——滑动窗口1.基础知识先区分好,枚举右端点,还是左端点,窗口内的条件改变后,一般都是while控制另一个窗口的移动,然后收集结算我感觉滑动窗口这里变动最大的,什么时候去滑动左窗口,什么时候去收集答案,都很不一样,得慢慢体会滑动窗口难题是真的难,呜呜呜呜......
  • 《力扣面试150题》题单拓展——双指针
    《力扣面试150题》题单拓展——双指针1.基础知识为什么双指针会正确?不会漏掉搜索空间数组nums递增排序,假设共8个元素假设由于搜索空间i<j的限制,只搜索右上角白色倒三角空间,一开始,我们检查右上方单元格(0,7),即计算A[0]+A[7],与target进行比较。如果不相等的话,则要么大......
  • JavaScript面试题
    列举常用的字符串方法indexOf(要查找的字符,开始索引)查找某个字符串第一次出现的位置lastIndexOf(要查找的字符,开始索引)查找某个子字符串最后一次出现的位置replace(被替换的内容,要替换的内容)替换好的字符串substr(从哪个索引开始,截取多少个)返回截取到的内容subst......
  • 数据库面试题从浅入深高频必刷「2024版」
    什么是数据库事务,它的ACID属性是什么?数据库事务是一组数据库操作的逻辑单元,要么全部执行成功,要么全部回滚。ACID属性是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。以下是对ACID属性的详细解释:原子性(Atomicity):原子性确保一个事务中的所有操......
  • 一天吃透Java并发面试八股文
    内容摘自我的学习网站:topjavaer.cn分享50道Java并发高频面试题。线程池线程池:一个管理线程的池子。为什么平时都是使用线程池创建线程,直接new一个线程不好吗?嗯,手动创建线程有两个缺点不受控风险频繁创建开销大为什么不受控?系统资源有限,每个人针对不同业务都可以手动......
  • 自我面试(左右互搏)
    1.讲一讲对AI的理解?(什么是AI、为什么要AI、怎么做AI)AI本质上就是一个输入系统,就像玩家有inputsystem一样,AI是NPC、怪物们的inputsystem。不同的是,玩家的输入是简单的、直白的;AI的输入往往会很复杂、多变。所以AI不是一个简单的输入系统,更像是一个环境感知+决策的系统。AI的复......
  • Java面试小练(五)
    1).请描述一下Maven中坐标的组成部分?以及在Maven项目添加一个依赖之后,依赖在仓库中的查找顺序。坐标是用于描述仓库中资源的位置其主要组成groupld:定义当前Maven项目隶属组织名称artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)version:定义当前项自版......