题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
示例
输入 4
返回值 5
知识点回顾
递归
这题就是青蛙跳,“一只青蛙一次可以跳上1级台阶,也可以跳上2级”,等价于本题矩阵要么是竖着放的1个,要么是横着放的2个
f(n) = f(n-1) + f(n-2); f(1)=1; f(2)=2
代码
#用数组实现
# -*- coding:utf-8 -*- class Solution: def rectCover(self, number): # write code here rec=[0,1,2] while number>=len(rec): rec.append(rec[-1]+rec[-2]) return rec[number]
#动态规划
# -*- coding:utf-8 -*- class Solution: def rectCover(self, number): # write code here if(number==1 or number==2 or number ==0): return number a=1 b=2 for i in range(3,number+1): c=a+b a=b b=c return c