329 矩陣中的最長遞增路徑

2021-10-08 13:00:10 字數 1583 閱讀 9107

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

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

示例 1:

輸入: nums = 

[[9,9,4],

[6,6,8],

[2,1,1]

] 輸出: 4 

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

示例 2:

輸入: nums = 

[[3,4,5],

[3,2,6],

[2,2,1]

] 輸出: 4 

解釋: 最長遞增路徑是 [3, 4, 5, 6]。注意不允許在對角線方向上移動。

1.超時

class solution 

}return result;

}private int callengthpath(int matrix, int row, int col, int length)

int right = length;

if(col + 1 < matrix[0].length && matrix[row][col+1] > matrix[row][col])

int up = length;

if(row - 1 >= 0 && matrix[row-1][col] > matrix[row][col])

int down = length;

if(row + 1 < matrix.length && matrix[row+1][col] > matrix[row][col])

int result = math.max(up, math.max(down, math.max(left, right)));

return result;

}}

2.加點記憶搜尋

class solution 

}return result;

}private int callengthpath(int matrix, int row, int col, int dp)

int left = 0;

if(col - 1 >= 0 && matrix[row][col-1] > matrix[row][col])

int right = 0;

if(col + 1 < matrix[0].length && matrix[row][col+1] > matrix[row][col])

int up = 0;

if(row - 1 >= 0 && matrix[row-1][col] > matrix[row][col])

int down = 0;

if(row + 1 < matrix.length && matrix[row+1][col] > matrix[row][col])

int result = math.max(up, math.max(down, math.max(left, right)));

dp[row][col]=result + 1;

return result + 1;

}}

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 記憶矩陣 儲存以該點位起點的最長路...

329 矩陣中的最長遞增路徑

題目 型別 深搜 記憶化遞迴 難度 困難 題意 從乙個二維矩陣中找到乙個嚴格遞增的路徑。使用深度搜尋,不需要標記,因為到當前點是需要滿足比原來點數值大的,所以也不會重複遍歷。然後使用記憶化遞迴記錄最長的路徑,如果已經計算過了直接返回。備註 2020.4.18位元組跳動三面面試題。面試官提示我使用回溯...