0
点赞
收藏
分享

微信扫一扫

面试题:汉诺塔问题 · 递归

言午栩 2023-11-29 阅读 47

在这里插入图片描述

你好,我是安然无虞。

文章目录


在这里插入图片描述

汉诺塔问题

问题描述

在这里插入图片描述

解题思路

在这里插入图片描述

代码详解

class Solution {
public:
    void hanota(vector<int>& A, vector<int>& B, vector<int>& C) 
    {
        // 将 A 上的盘子借助 B 移动到 C 上
        _hanota(A, B, C, A.size());
    }

    void _hanota(vector<int>& A, vector<int>& B, vector<int>& C, int n)
    {
        // 递归出口
        if(n == 1)
        {
            C.push_back(A.back());
            A.pop_back();
            return;
        }

        // 首先将 A 中的 n - 1 个盘子通过 A C 移动到 B 上
        _hanota(A, C, B, n - 1);

        // 然后将 A 中最后一个大盘直接移动到 C 上
        C.push_back(A.back());
        A.pop_back();

        // 最后通过 A B 将 B 上的圆盘移动到C上
        _hanota(B, A, C, n - 1);
    }
};
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

在这里插入图片描述

举报

相关推荐

0 条评论