動態規劃 矩陣中的最長遞增路徑

2022-08-22 03:30:19 字數 1500 閱讀 1010

給定乙個整數矩陣,找出最長遞增路徑的長度。

對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。

輸入: nums =[

[9,9,4],

[6,6,8],

[2,1,1]

] 輸出: 4解釋: 最長遞增路徑為 [1, 2, 6, 9]。

在這裡比較適合使用動態規劃來解題。

我們用matrix來儲存原本數字的矩陣,然後建立乙個新矩陣store,其中每乙個元素(i,j)表示在matrix走到(i,j)最長遞增路徑長度。

這樣的話**就比較好寫了:

class

solution:

def longestincreasingpath(self, matrix: list[list[int]]) ->int:

ifnot

matrix:

return

0 h,w =len(matrix),len(matrix[0])

store = [[none]*(w) for i in

range(h)]

m = 0 #

儲存max路徑值

defsearch_nearby(i,j):

nonlocal m

compare = #

儲存可以比較的候選人

#這個樓主很懶,還沒想怎麼簡化下面的**

#反正下面四個**塊就是分別看一下上、下、左、右哪些格仔的值可以當做候選人比較#上

if i != 0 and matrix[i-1][j] < matrix[i][j]: #

有上邊且上邊小於當前數的話

#左if j != 0 and matrix[i][j-1] < matrix[i][j]: #

有左邊且左邊小於當前數的話

#下if i != h-1 and matrix[i+1][j] < matrix[i][j]: #

有下邊且下邊小於當前數的話

#右if j != w-1 and matrix[i][j+1] < matrix[i][j]: #

有右邊且右邊小於當前數的話

store[i][j] = max(compare)+1 if compare else 1

#如果沒有compare說明這是乙個很小的數,是乙個起始點,能組成的長度只有1

#有的話就原來最長路徑+1

m =max(m,store[i][j])

return

(store[i][j])

for i in

range(h):

for j in

range(w):

ifnot

store[i][j]:

search_nearby(i,j)

return m

矩陣中的最長遞增路徑

矩陣中的最長遞增路徑 給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 題解 首先看到這道題,突然想到島嶼那題,每次向著四個方向不斷遞迴 只是條件是只遞迴比當前數大的數,所以使用深度搜尋,並且返回搜尋中...

329 矩陣中的最長遞增路徑

給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 示例 2 輸入 nums 3,4,5 3,...

329 矩陣中的最長遞增路徑

給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 dfs 記憶矩陣 儲存以該點位起點的最長路...