矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
![](https://img2020.cnblogs.com/blog/1654771/202005/1654771-20200521195808017-886879287.png)
首先给我想到的是递归的思想:
然后就是找规律
f(0) = 0 ; f(1) = 1; f(2) = 2; f(3) = 3;刚好f(3) = f(1)+f(2);大胆猜测了一波f(n)= f(n-1)+f(n-2); 啊哈哈猜对了
class Solution {
public:
int rectCover(int number) {
if(number == 0)
return 0;
else if(number == 1)
return 1;
else if(number == 2)
return 2;
else if(number == 3)
return 3;
else
return (rectCover(number -1)+rectCover(number -2));
}
};
斐波那契数列:
class Solution {
public:
int rectCover(int number) {
if(number == 0)
return 0;
if(number ==1)
return 1;
if(number == 2)
return 2;
int a=1,b=2,c=0;
for(int i =3;i<=n;i++){
c=a+b;
a =b;
b =c;
}
return c;
}
};