題目描述:我們可以用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 …
就是一個類似斐波那契數列
牛客網測試通過
//本文章由筆者原創,記錄和分享自己的學習歷程,轉載請註明出處