題目描述
我們可以用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))
JZ 10矩形覆蓋
題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?eg 比如n 3時,23的矩形塊有3種覆蓋方法 解法 如果到這裡,還沒有發現規律怎麼辦呢?那我們就再分析以下,從n 3到n 4,怎麼來的呢?這裡有2種情況 直接在...
10 矩形覆蓋(劍指offer)
10.矩形覆蓋 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?1.思路 以2x8的矩形為例。示意圖如下 我們先把2x8的覆蓋方法記為f 8 用第乙個1x2小矩陣覆蓋大矩形的最左邊時有兩個選擇,豎著放或者橫著放。當豎著放...
劍指offer 10 矩形覆蓋
題目 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 斐波那契數列的變種,為什麼是斐波那契數列的變種?首先我們 認為小矩形為n的時候的總數是n,而那麼根據組合數學裡的加法原理,我把此題分為兩類,第一類就是小矩形1 ...