【剑指offer】矩形覆盖 -- Python 实现

【题目描述】
我们可以用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]
发布了24 篇原创文章 · 获赞 0 · 访问量 249

猜你喜欢

转载自blog.csdn.net/qq_36643449/article/details/104444773