題目描述
我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
時間限制:1秒 空間限制:32768K 熱度指數:318412
本題知識點: 遞歸
思路
依舊是斐波那契數列的變形。
2*N的大矩形,和N個2*1的小矩形。
接下來,我們需要考慮的是遞歸的幾種情形:
1、target <= 0 ,return 0;
(很多人認爲這裏應該是return 1,但是我不認同,因爲target < =0 ,對於計算機來說,應該是一種異常情況)
2、target = 1,大矩形爲2*1,小矩形只有 1 種擺法,return 1;
3、target = 2, 大矩形爲2*2,小矩形有2中擺法,return 2;
4、target = N,此時分爲兩步走:
1)第一次豎着擺一個小矩形,那麼擺放的方法總共有 F(target - 1)種擺法;
2)第一次橫着擺一個小矩形,那麼擺放的方法總共有 F(target - 2)種擺法;
解釋一下:爲啥是F(target - 2),因爲只要第一塊小矩形是橫着擺放,那麼下面的位置也就確定了。
======》》》
參考代碼
public class Solution {
public int RectCover(int target) {
if (target < 0) {
return 0;
}
if (target == 1) {
return 1;
} else if(target == 2) {
return 2;
} else {
return RectCover(target -1) + RectCover(target - 2);
}
}
}