• 【C++】LeetCode面试题 08.06. 汉诺塔问题


    面试题 08.06. 汉诺塔问题

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

    示例1:

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

    示例2:

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

    提示:

    A中盘子的数目不大于14个。
    

    代码学习:

    class Solution {
    public:
        void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
            int n = A.size();//盘子的总数
            move(n,A,B,C);
        }
        //move函数,第一个数组指当前从谁移盘子,第二个数组表示借助谁,第三个数组表示把盘子移到谁那去
        void move(int n,vector<int>& A, vector<int>& B, vector<int>& C){
            if(n==1){//如果只有1个盘子
                C.push_back(A.back());
                A.pop_back();
                return;
            }
            //有2个或多于2个盘子
            move(n-1,A,C,B);//先借助C把A上的n-1个转移到B上
            C.push_back(A.back());//A上只有一个最大的盘子,把它转移到C上
            A.pop_back();//pop之后,A上是空的了
            move(n-1,B,A,C);//借助A把B上的n-1个盘子转移到C上
        }
    };
    
  • 相关阅读:
    汇编笔记
    C++知识点复习
    flask 初步
    flask and postgre on heroku
    google zxing二维码库 初始
    flasklogin解读
    flasksqlalchemy 关系(一对多)
    flask的信号
    flask 范例学习
    github 操作纪录
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059101.html
Copyright © 2020-2023  润新知