剑指offer10-矩形覆盖

题目描述

我们可以用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

 

posted @ 2020-11-17 20:07  foolangirl  阅读(64)  评论(0编辑  收藏  举报