天天看点

@剑指offer(Python)矩形覆盖剑指offer刷题笔记10(Python)

剑指offer刷题笔记10(Python)

题目描述

我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路

这还是一个裴波那契数列的应用题。第一步矩形覆盖时可以有两种覆盖方法,即横着放和竖着放,当竖着放的时候,接下来就相当于覆盖2n-1的大矩形;当横着放的时候,就相当于覆盖2n-2的大矩形。

横着放:

@剑指offer(Python)矩形覆盖剑指offer刷题笔记10(Python)

竖着放:

@剑指offer(Python)矩形覆盖剑指offer刷题笔记10(Python)

因此可以借助裴波那契数列来做。

代码

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        if number == 1 or number == 2 or number == 0:
            return number
        res = [1,2]
        for i in range(number-2):
            res.append(dp[-1]+dp[-2])
        return res[-1]