我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
这个题的分析详见剑指offer,这里记录一点实现细节。
- 测试数据里有0这个数,代表一块地砖也没有,方法数自然为0
- 事实上,真正的斐波那契序列是从1开始的,有1块地砖,只有一种铺法,2块地砖就有2种了,后面以此类推。
- 因此这就需要我们代码单独处理0,然后按照常规写斐波那契序列,考虑到效率使用迭代法,而不是递归法。
class Solution {
public:
int rectCover(int number) {
if (number== 0)
return 0;
if (number == 1)
return 1;
if (number == 2)
return 2;
int n0 = 1;
int n1 = 2;
int res = n0;
for (int i = 3; i <= number; i++)
{
res = n0 + n1;
n0 = n1;
n1 = res;
}
return res;
}
};