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

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

思路:(下面說到的x*y的矩形,x是寬,y是長,固定一下方便理解)假設一個2×n的矩形,那麼放第一個小矩形有兩種放法:放2×1的或者放1×2的,如果是放1×2的意味着在它的下面也只能放一個1×2的,組成一個2×2正方形。那麼我們就可以分爲兩種結構,第一種是2×1的矩形,第二種是2×2的正方形。寬都是2不用考慮,長有1和2兩種選擇,那麼可以將問題轉換爲:長爲n的線段由長爲1和長爲2的線段組成,共有多少種組成方法。

下面是代碼:

class Solution {
public:
    int rectCover(int number) {
        if(number<=3)
            return number;
        return rectCover(number-2)+rectCover(number-1);
    }
};

長爲n的線段組成方法=(第一步放長爲1後剩下的線段的組成方法)+(第一步放長爲2後剩下的線段的組成方法)
即f(n)=f(n-1)+f(n-2)
1,2,3,5,8 …
就是一個類似斐波那契數列

牛客網測試通過
//本文章由筆者原創,記錄和分享自己的學習歷程,轉載請註明出處

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