知识点:递归
一、题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
二、解题思路:
三、代码实现:
C++实现:
class Solution {
public:
int rectCover(int n) {//直接套用推导的数学公式
if(n<=3){
return n;
}else{
return rectCover(n-1)+rectCover(n-2);
}
}
};
python实现递归超出时间限制。
python采用循环实现:
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, n):
# write code here
if n<=3:
return n
f2 = 2
f3 = 3
fn = 0
for i in range(4,n+1):
fn = f2+f3
f2 = f3
f3 = fn
return fn