劍指offer53 — 矩形覆蓋
題目
我們可以用21的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
比如n=3時,2*3的矩形塊有3種覆蓋方法:
分析
實質上是斐波那契數列的思想。
第一個填滿,即豎着放的時候,還剩下f(n-1)种放法。
第一個橫着放的時候,即兩個橫着放的時候,還剩下f(n-1)种放法。
因此,有f(n)=f(n-1)+f(n-2),那麼也就需要知道n=1以及n=2時候有幾種放法,當n=1時,只有一種放法,n=2時,有兩種方法。
代碼
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number == 0:
return 0
if number == 1:
return 1
if number == 2:
return 2
a = 1
b = 2
for i in range(3,number + 1):
b = a + b
a = b - a
return b