时间限制:1秒 空间限制:32768K 热度指数:235356
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
一开始想错了,其实就是斐波那契数列,假设f(n)为覆盖一个2*n的大矩形的方法数
当n>=3时 f(n)=f(n-1)+f(n-2),相当于f(n-2)再加上两个横排的矩形和f(n-1)+上一个竖着的矩形
PS:f(n-2)加上两个竖着的矩形包含于f(n-1)加上一个竖着的矩形
class Solution {
public:
int rectCover(int n) {
if(n<=2)
return n;
int a1=1;
int a2=2;
int t;
for(int i=3;i<=n;i++)
{
t=a1+a2;
a1=a2;
a2=t;
}
return t;
}
};