leetcode-漢諾塔問題

  1. class Solution {
  2. public:
  3.     void move(int n,vector<int>& A, vector<int>& B, vector<int>& C) {
  4.         if(1==n)
  5.         {
  6.             C.push_back(A.back());
  7.             A.pop_back();
  8.             return;
  9.         }
  10.         move(n-1,A,C,B);
  11.         move(1,A,B,C);
  12.         move(n-1,B,A,C);
  13.     }
  14.  
  15.     void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
  16.         move(A.size(),A, B, C);
  17.     }
  18. };

漢諾塔問題,想半天沒有想出來。

原來很簡單,分治遞歸的思路

1個: A 到C

2個:A到B,A到C,B到C

n個:A的除最底部的到B(這裏又是一個完整的漢諾塔問題), A的底部到C ,所有B到C(這裏又是一個完整的漢諾塔問題)

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章