斐波那契數列之矩形覆蓋問題

題目描述

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


解答:

愁死我了,上來就把題目看錯了,以爲是覆蓋一個面積爲2n的大矩形,後來才發現是長n寬2的矩形。

這道題應用歸納法可以得出是一個典型的斐波那契數列。

當i=1的時候,顯然只有一種擺法。

當i=2的時候,可以有 || 和 = 兩種擺法。

當i>2的時候,如果第一個矩形是豎着擺的也就是|,那麼剩下的部分顯然是一個2*(n-1)的矩形。

而第一個矩形是橫着擺的時候,顯然必須得有兩個矩形組成=才能填滿,那麼久相當於剩下了一個2*(n-2)的一個矩形。

所以可以得到F(n)=F(n-1)+F(n-2);

典型的斐波那契數列。

算法中使用遞歸趨勢線斐波那契數列顯然是不合適的,時間開銷太過龐大,所以採用動態規劃的方法,代碼如下:

public class Solution {
    public int RectCover(int target) {
        
    int[] record = new int[target+1];
        
        if(target==0) return 0;
        if(target==1) return 1;
        if(target==2) return 2;
        record[0]=0;record[1]=1;record[2]=2;
        for(int i=3;i<target+1;i++){
            record[i]=record[i-1]+record[i-2];
        }
        return record[target];

    }
}


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