剑指offer刷题笔记10(Python)
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
这还是一个裴波那契数列的应用题。第一步矩形覆盖时可以有两种覆盖方法,即横着放和竖着放,当竖着放的时候,接下来就相当于覆盖2n-1的大矩形;当横着放的时候,就相当于覆盖2n-2的大矩形。
横着放:
竖着放:
因此可以借助裴波那契数列来做。
代码
# -*- 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]