题目描述
我们可以用2*1
的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1
的小矩形无重叠地覆盖一个2*n
的大矩形,总共有多少种方法?
解题思路
其实动手推一下就会发现是一个Fibonacci数列
f(0) = 0;
f(1) = 1;
f(2) = 2;
…
f(n) = f(n-1)+f(n-2);
Code
- cpp
class Solution {
public:
int rectCover(int number) {
if(number == 0) return 0;
int f0 = 0, f1 = 1;
for(int i = 0; i<number; i++) {
f1 += f0;
f0 = f1-f0;
}
return f1;
}
};
- java
public class Solution {
public int RectCover(int target) {
if(target == 0) return 0;
int f0 = 0, f1 = 1;
for(int i = 0; i<target; i++) {
f1 += f0;
f0 = f1-f0;
}
return f1;
}
}
总结
- 递归/递推中的经典题