题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析:设 f(n) 为 2*n 的矩形的覆盖方法总数。从第一步开始考虑,有两种放法:
- 若竖放,则剩余的矩形为 2*(n-1),放法有 f(n-1) 种;
- 若横放,则其下面也只能横放,剩余的矩形为 2*(n-2),放法有 f(n-2) 种;
将所有可能的情况加起来,即为总的情况,即:
f(n) = f(n-1) +f(n-2)
代码如下:
int rectCover(int number) {
if (number == 1){
return 1;
}
if (number == 2){
return 2;
}
int a = 1, b= 2;
int result = 0;
for(int i = 3; i <= number; ++i){
result = a + b;
a = b;
b = result;
}
return result;
}