給定乙個整數矩陣,找出最長遞增路徑的長度。
對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。
輸入: nums =[在這裡比較適合使用動態規劃來解題。[9,9,4],
[6,6,8],
[2,1,1]
] 輸出: 4解釋: 最長遞增路徑為 [1, 2, 6, 9]。
我們用matrix來儲存原本數字的矩陣,然後建立乙個新矩陣store,其中每乙個元素(i,j)表示在matrix走到(i,j)最長遞增路徑長度。
這樣的話**就比較好寫了:
classsolution:
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 記憶矩陣 儲存以該點位起點的最長路...