1. 程式人生 > >JAVA實現矩形覆蓋問題(《劍指offer》)

JAVA實現矩形覆蓋問題(《劍指offer》)

題目描述:

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。 請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法? 最近在刷《劍指offer》裡的程式設計題,但是網上關於《劍指offer》的解答多半是C或者C++的,而且官方(作者)也是在用C++進行講解,這裡自己用java寫了一些題目的解答程式碼(當然也有部分是借鑑了網上別人的解答的,出處未註明敬請之處請指出,侵刪),希望能對大家的學習有所幫助。
牛客網問題框架截圖:
解答:
  1. <pre name="code"class="java">publicclass Solution {  
  2.     publicint RectCover(int target) {  
  3.          //對實參進行預處理當然是必不可少的
  4.         if(target<0return0;   
  5.         int f0 = 0, f1 = 1;   
  6.         int fn = f0 + f1;   
  7. //這個問題最後也可以轉化為斐波那契數列來思考:當大矩形的長度為n時,前兩格的覆蓋方式有兩種,第一種是在第一格上豎著放一個小矩形,這樣後面的空格的方法就和大矩形長度為n-1時一樣;第二種是在前兩格橫著放置兩格小矩形,這樣後面的空格的放置方法就和大矩形長度為n-2時的一樣
  8.         for
    (int i=2; i<=target;i++){   
  9.             f0 = f1;   
  10.             f1 = fn;   
  11.             fn = f0 + f1;   
  12.         }   
  13.         return fn;   
  14.     }  
  15. }  


牛客網編譯通過截圖: