题目描述
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
- 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
理解
- n个2*1的小矩形 覆盖 2*n的大矩形
- 覆盖方式:横着或者竖着
- 本质上还是斐波那契数列问题
矩形覆盖问题分析 - F(0) = 0
- F(1) = 1
- F(2) = 2
- F(n) = F(n-1) + F(n+1) (n>2)
解题思路
思路1
class Solution:
def rectCover(self, number):
a = [0,1,2]
for i in range(3,number+1):
a.append(a[i-1]+a[i-2])
return a[number]
或者
class Solution:
def rectCover(self, number):
if number < 3:
return number
else:
a,b=1,2
for i in range(2,number):
a,b=b,a+b
return b