汉诺塔和汉诺塔进阶问题【算法题】

题目:给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都在左边的柱子上,按照汉诺塔游戏的要求把所有的圆盘都移动到右边的主子上,实现函数打印最优移动轨迹。
例:
n=1 打印: move from left to right
n=2 打印: move from left to mid
move from left to right
move from mid to right

进阶题目:给定一个整形数组arr,其中只含有1,2,3
代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱
arr[i]的值代表第i+1个圆盘的位置。比如 arr=[3,3,2,1],代表第1个圆盘在右柱,第2个圆盘在右柱,第3个圆盘在中柱上,第4个圆盘在左柱上。 如果arr代表的状态是最优的移动轨迹中出现的状态,就返回是第几个状态;如果不是,就返回-1

  • 例子: arr[1,1] 返回0 arr[2,1] 返回1 arr[3,3] 返回3 arr[2,2] 返回-1
  • 要求:时间复杂度O(N),额外空间复杂度O(1)
public class 汉诺塔问题 {
   
    public static void main(String[] args) {
   
        hanoi(4, 'a','b','c');
        System.out.println(HanoiStatus(new int[]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值