当前位置: 代码迷 >> 综合 >> LeetCode:矩阵最长递增路径
  详细解决方案

LeetCode:矩阵最长递增路径

热度:81   发布时间:2024-01-21 08:28:24.0

329:给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。

class Solution {private int[][] memo;private int[][] matrix;public int longestIncreasingPath(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;this.memo = new int[m][n];this.matrix = matrix;int maxLength = Integer.MIN_VALUE;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(memo[i][j]!=0){continue;}//若遇到没有遍历过的位置,由于没有上一个值,需要手动向四周扩散int val = matrix[i][j];int left = dfs(matrix,i,j-1,val);int right = dfs(matrix,i,j+1,val);int up = dfs(matrix,i-1,j,val);int down = dfs(matrix,i+1,j,val);//到达当前位置的最长距离,即挑选四周最长的长度,并且挑选四周中比自己小的memo[i][j] = Math.max(Math.max(left,right),Math.max(up,down))+1;}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){maxLength = Math.max(maxLength,memo[i][j]);}}return maxLength;}public int dfs(int[][] matrix,int row,int col,int lastNum){//越界if(row<0||row>matrix.length-1||col<0||col>matrix[0].length-1){return 0;}//如果比上一个值大,终止if(matrix[row][col]>=lastNum){return 0;}if(memo[row][col]!=0){return memo[row][col];}int val = matrix[row][col];//四周遍历int left = dfs(matrix,row,col-1,val);int right = dfs(matrix,row,col+1,val);int up = dfs(matrix,row-1,col,val);int down = dfs(matrix,row+1,col,val);//到达当前位置的最长距离,即挑选四周最长的长度,并且挑选四周中比自己小的memo[row][col] = Math.max(Math.max(left,right),Math.max(up,down))+1;return memo[row][col];}}