题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
解题思路
同样是一个找递推关系的题,假设我们已知2n的矩形有f(n)中覆盖方式,这里使用21的矩形去填充,所以我们应该找的是f(n)、f(n+1)、f(n+2)这三者的关系。
从f(n+1)到f(n+2)只用一种填充:
从f(n)到f(n+2),且不经过f(n+1)的形式,也只有一种填充方式:
于是,递推关系就是
f
(
n
+
2
)
=
f
(
n
+
1
)
+
f
(
n
)
f(n+2)=f(n+1)+f(n)
f(n+2)=f(n+1)+f(n);
源代码
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<=number;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
};