【题目描述】
我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法?
比如n=3时,2x3的矩形块有3种覆盖方法:
【解题思路】
此题是斐波那契数列的变体。可以这样考虑:当逐步往右填充小矩形时,最后两列有两种填充方式:第一种填充方式是在最右边一列竖着填充2x1的小矩形,第二种填充方式是在最右边两列填充2x2的矩形,又因为2x2的矩形有两种填充方式,分别是横着填充两个2x1的矩形和竖着填充两个2x1的矩形,而竖着填充两个2x1的矩形跟之前的情形有所重复。所以最终来看,填充2xn的矩形的方法种数等于填充2x(n-1)的矩形的方法种数与2x(n-2)的矩形的方法种数之和,用Python实现的代码如下:
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
a=[]
a.append(0)
a.append(1)
a.append(2)
for i in range(3,number+1):
a.append(a[i-1] + a[i-2])
return a[number]