我們可以用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個空間來安排放置小矩形 如果第乙個小矩形橫著放,那麼它的下面一定是橫著放到,而右...