矩阵覆盖
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
这个问题和 跳台阶 很相似,2*n的大矩形就相当于“跳台阶“问题中的台阶,大矩形的长度n相当于台阶的个数n;从左至右的去覆盖,把小矩形竖着放相当于跳一个台阶,把小矩阵横着放相当于跳两个台阶。
故:当前n的覆盖种数 = 当前n-1的覆盖总数 + 当前n-2的覆盖总数
即:f (n) = f (n-1) + f (n-2)
代码
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
a = [0,1,2]
for i in range(3, number+1):
a.append(a[i-1]+a[i-2])
return a[number]