题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,从同一个方向看总共有多少种不同的方法?
和跳台阶问题类似的求解思路。
对于有n块矩形需要覆盖的情况,第一块矩形如果竖着放置,则剩余的部分还有f(n-1)种覆盖方式;第一块矩形如果横着防止,则第二块一定也要横着放置,剩余部分还有f(n-2)种覆盖方式。
即f(n) = f(n-1)+f(n-2)
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number < 3:
return number
f1 = 1
f2 = 2
for i in range(number-2):
tem = f1+f2
f1 = f2
f2 = tem
return f2