Java 矩形覆蓋
阿新 • • 發佈:2018-11-12
1. 題目描述
我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
2. 解題思路
- 當要覆蓋2*1的大矩陣時:只有一種方式即f(1) = 1
- 當要覆蓋2*2的大矩陣時:可以有兩種跳法:f(2) = 2
- 當有23階臺階時,這裡先看第一步怎麼走,分兩種情況:
當先覆蓋一個21時,那剩下的22覆蓋就有兩種情況,即f(2) = 2; 當先覆蓋一個22時,比如下圖中中間的覆蓋情況,那剩下的2*1就的覆蓋方法數為f(1) = 1;那麼也即是n=3時,兩種情況加起來就是:f(3)=f(1)+f(2)
- 同理可以總結出:f(n)=f(n-1)+f(n-2),也即是斐波那契數列。
3. 程式碼
public class RectangularCover {
public static void main(String[] args){
RectangularCover mm=new RectangularCover();
int tt=mm.RectCover(4);
System.out.println(tt);
}
public int RectCover(int target) {
if ( target < 1 )
return 0;
int g = 1;
int f = 2;
while (target>1 ) {
f = f + g;
g = f - g;
target--;
}
return g;
}
}
執行:
5
以上僅作學習筆記。