题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解法:
考虑横放和竖放:
- 当竖着放的时候,右边还剩下 2x7 的区域,记为 f(7)。
- 当横着放的时候,当 2x1 的小矩形横着放在左上角的时候,左下角必须也横着放一个2x1 的小矩形,此时右边剩下 2x6 的区域了,记为 f(6)。
- 则有 f(8) = f(7) + f(6)
- 归纳:f(n) = f(n-1) + f(n-2), n>2;f(1) = 1, f(2) = 2。
class Solution {
public:
int rectCover(int number) {
if(number == 0)
return 0;
else if(number == 1)
return 1;
else if(number == 2)
return 2;
else
return rectCover(number-1) + rectCover(number-2);
}
};