一、题目
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
二、大致思路
思路:
【1】根据前几项1,2,3,5,8,13,……推出公式:f(n)=f(n-1)+f(n-2),n>=3 ; f(n)=n,n<3
【2】画图推导公式
当n>=3时,2n 由 2(n-1) 和 2*(n-2) 两种情况构成,因此可推导出思路1中的公式。
三、代码实现:
class Solution {
public:
int rectCover(int number) {
if(number<3){
return number;
}
return rectCover(number-1) + rectCover(number-2);
}
};
斐波那契数列
public int RectCover(int n){
if(n <= 2)
return n;
int pre2 = 1,pre1 = 2;
int result = 0;
for(int i = 3; i <= n; i++){
result = pre2 + pre1;
pre2 = pre1;
pre1 = result;
}
return result;
}