Description
我们可以用2 ×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×1的小矩形无重叠地覆盖一个2×n的大矩形,总共有多少种方法?
Solution 1: Dynamic Programming
注:n = 0时return 0
对于一个2×n的大矩形,我们最左边的小格子最多有两种摆法:
- 竖着摆一个1×2,这样其余是F(n-1)种摆法
- 横着摆两个1×2,这样其余有F(n-2)种摆法
这样仍旧是一个斐波那契数列
//C++
int rectCover(int number) {
int a = 1, b = 2;
while(--number > 0){
b = a + b;
a = b - a;
}
return number == -1 ? 0 : a;
}