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