題目描述
我們可以用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))