给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
示例 1:
输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为 [1, 2, 6, 9]。
代码
class Solution {
int[][] check;
public int longestIncreasingPath(int[][] matrix) {
int[][] dir = new int[][]{{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
if(matrix.length==0) return 0;
int n=matrix.length,m=matrix[0].length;
check=new int[n][m];
int res=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(check[i][j]==0)
IncreasingPath(matrix,i,j,dir);
res= Math.max(res,check[i][j]);
}
return res;
}
public int IncreasingPath(int[][] matrix,int x,int y,int[][] dir) {
if(check[x][y]!=0) return check[x][y];
int temp=0;
check[x][y]=1;
for(int[] d:dir)
{
int nextX=d[0]+x,nextY=d[1]+y;
if(nextX<0||nextY<0||nextX>=matrix.length||nextY>=matrix[0].length||matrix[nextX][nextY]<=matrix[x][y]) continue;
temp= Math.max(temp,IncreasingPath(matrix,nextX,nextY,dir));
}
check[x][y]+=temp;
return check[x][y];
}
}