- class Solution {
- public:
- void move(int n,vector<int>& A, vector<int>& B, vector<int>& C) {
- if(1==n)
- {
- C.push_back(A.back());
- A.pop_back();
- return;
- }
- move(n-1,A,C,B);
- move(1,A,B,C);
- move(n-1,B,A,C);
- }
- void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
- move(A.size(),A, B, C);
- }
- };
汉诺塔问题,想半天没有想出来。
原来很简单,分治递归的思路
1个: A 到C
2个:A到B,A到C,B到C
n个:A的除最底部的到B(这里又是一个完整的汉诺塔问题), A的底部到C ,所有B到C(这里又是一个完整的汉诺塔问题)