劍指—JZ10矩形覆蓋

題目描述

我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

 

比如n=3時,2*3的矩形塊有3種覆蓋方法:

解題思路

記憶化遞歸

這了可以以長來做判斷,這裏長就是n,每次填充要麼豎着填充即填充1,要麼橫着填充即填充2,所以和斐波那契數列有點像

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self._dict = {}
    def rectCover(self, number):
        # write code here
        def dfs(n):
            if n == 0:
                return 1
            if n < 0:
                return 0
            if n in self._dict:
                return self._dict[n]
            self._dict[n] = dfs(n - 1) + dfs(n - 2)
            return self._dict[n]

        if number == 0:
            return 0
        res = dfs(number)
        return res

S = Solution()
print(S.rectCover(3))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章