劍指OFFER 10矩陣覆蓋

2021-10-09 18:05:45 字數 832 閱讀 6311

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

這道題的要點就是對於題幹的理解和轉換,可以看到大矩形的行上的長度是固定的(2)唯一的變化在於列上的長度(n)

而列上的填充方式:1.2 * 1的小矩陣豎著去覆蓋(相當於前進一格) 2.2個2 * 1的小矩陣橫著去覆蓋(相當於前進兩格)

於是這個問題就轉換成了青蛙跳格的問題了

定義陣列元素的含義:dp[i] 當n為i時的覆蓋方法

陣列元素之間的關係式:dp[i] = dp[i-1]+dp[i-2] (這裡同跳格問題一樣到達i的策略有兩種從i-1的位置跳一格,或者從i-2的位置跳兩格)

初始值:dp[0] = 0 dp[1] = 1 dp[2] = 2

def

rectcover

(self, number)

:# write code here

# 0 1 2 3 5 8 13

dp =[0

]*(number+1)

if number <3:

return number

dp[0]

=0dp[1]

=1dp[2]

=2for i in

range(3

,number+1)

: dp[i]

=(dp[i-1]

+ dp[i-2]

)return dp[number]

測試:牛客

劍指offer 10矩陣覆蓋

0.簡介 本文是牛客網 劍指offer 刷題筆記,筆記索引鏈結 1.題目 用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?2.思路 2 1的矩陣覆蓋2 8的矩陣的方法f 8 用第乙個1 2矩陣覆蓋2 8矩陣的最左邊時有豎著或橫著...

劍指offer 10 矩形覆蓋

題目 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 斐波那契數列的變種,為什麼是斐波那契數列的變種?首先我們 認為小矩形為n的時候的總數是n,而那麼根據組合數學裡的加法原理,我把此題分為兩類,第一類就是小矩形1 ...

劍指offer 10 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 對於矩形的覆蓋,2 n大小的矩形,如果第乙個小矩形豎著放,那麼右邊還有n 1個空間來安排放置小矩形 如果第乙個小矩形橫著放,那麼它的下面一定是橫著放到,而右...