給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。
示例1:
示例2:
很顯然只能將所有情況完全遍歷一次,將以任意一點為起點的情況全部遍歷完,也就是對每個點進行深度優先搜尋。但是這樣的時間複雜度直接**。所以我們需要考慮如何優化。很顯然我們這裡有很多的重複情況,我們就建立一張快取表來放置以前計算出來的值。
package solution;
/** * @author xgj
*/public class solution , , , };
private int rows, columns;
public int longestincreasingpath(int matrix)
this.rows = matrix.length;
this.columns = matrix[0].length;
int memo = new int[this.rows][this.columns];
int ans = 0;
for (int i = 0; i < this.rows; ++i)
}return ans;
}public int dfs(int matrix, int row, int column, int memo)
//該位置以自己為起點,以自己為終點可以構成乙個長度為一的陣列。
++memo[row][column];
for (int dir : dirs)
}return memo[row][column];}}
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位元組跳動三面面試題。面試官提示我使用回溯...