|
文章目录
- 汉诺塔问题
- 问题描述
- 解题思路
- 代码详解
汉诺塔问题
问题描述
解题思路
这道题的名字还是很响的,基本上都能看出来使用递归解题,但是具体怎么实现还是需要细细想一想。
我们一步一步来,请看:
代码详解
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);}
};
|
|