美文网首页程序员
LeetCode:汉诺塔

LeetCode:汉诺塔

作者: 李海游 | 来源:发表于2020-04-20 20:22 被阅读0次

面试题 08.06. 汉诺塔问题

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
你需要原地修改栈。
示例1:
输入:A = [2, 1, 0], B = [], C = []
输出:C = [2, 1, 0]

思路:

原问题:N个盘子,由A,借助C,移动到B

  1. 先将N-1个盘子由A,借助C,移动到B(此时A中只有第N个盘子,C中没有盘子,B中N-1个盘子);
  2. 再将第N个盘子由A,移动到C(此时A中没有盘子,C中只有第N个盘子,B中N-1个盘子);
  3. 最后将N-1个盘子由B,借助A,移动到C:该问题为原问题的子问题,可递归解决
class Solution {
public:
    void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
        int n = A.size();
        move(n, A, B, C);
    }

    void help(int n, vector<int>& A, vector<int>& B, vector<int>& C){
        if (n == 1){
            C.push_back(A.back());
            A.pop_back();
            return;
        }
        help(n-1, A, C, B);    // 将A上面n-1个通过C移动到B
        C.push_back(A.back());  // 将A中的最后一个移动到C
        A.pop_back();          // 弹出最后一个,A为空
        help(n-1, B, A, C);     // 将B上面n-1个通过A移到C,为原问题的子问题
    }    
};

相关文章

  • LeetCode:汉诺塔

    面试题 08.06. 汉诺塔问题 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意...

  • 汉诺塔算法和背后的数据结构

    汉诺塔是有算法的。 很多问题都有解决办法,汉诺塔也不例外。如果汉诺塔的算法符合 Introduction to a...

  • LeetCode习题:汉诺塔问题

    题目描述:在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘...

  • 【成都企业拓展】:成都企业拓展《汉诺塔》游戏?

    【成都企业拓展】:成都企业拓展《汉诺塔》游戏? 汉诺塔游戏流程与目标 全队人员共同协作将汉诺塔从初始位置原样移动到...

  • 动态规划刷题整理(持续更新)

    (持续更新) 奇怪的汉诺塔(4柱汉诺塔) 描述汉诺塔问题,条件如下:1、这里有A、B、C和D四座塔。2、这里有n个...

  • Python使用递归解决汉诺塔问题

    汉诺塔 (http://baike.baidu.com/view/191666.htm) , 汉诺塔问题也是程序设...

  • python_递归函数

    汉诺塔算法:

  • Python汉诺塔递归算法

    汉诺塔含义: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石...

  • 汉诺塔

    暑假里爸爸给我买了一个益智玩具——汉诺塔。 汉诺塔五彩缤纷,共有十层。 将汉诺塔摆好,却不知从哪...

  • 【HDU 1997】汉诺塔VII

    汉诺塔VII(题目链接) 思路 本文参考了下列文章汉诺塔的回顾和深刻 汉诺塔VII 首先用数组将每一个样例的状态存...

网友评论

    本文标题:LeetCode:汉诺塔

    本文链接:https://www.haomeiwen.com/subject/uckmbhtx.html