ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

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

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 汉诺塔问题
    • 问题描述
    • 解题思路
    • 代码详解

在这里插入图片描述

汉诺塔问题

问题描述

在这里插入图片描述

解题思路

这道题的名字还是很响的,基本上都能看出来使用递归解题,但是具体怎么实现还是需要细细想一想。

我们一步一步来,请看:

在这里插入图片描述

代码详解

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);}
};
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

在这里插入图片描述

返回列表