Java 矩形覆蓋

1. 題目描述

我們可以用21的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

2. 解題思路

  • 當要覆蓋2*1的大矩陣時:只有一種方式即f(1) = 1
    在這裏插入圖片描述
  • 當要覆蓋2*2的大矩陣時:可以有兩種跳法:f(2) = 2
    在這裏插入圖片描述
  • 當有23階臺階時,這裏先看第一步怎麼走,分兩種情況:
    當先覆蓋一個2
    1時,那剩下的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

以上僅作學習筆記。

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