- 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(這裏又是一個完整的漢諾塔問題)