classSolution{publicintlongestIncreasingPath(int[][] matrix){int max =1;int[][] maxPath =newint[matrix.length][matrix[0].length];for(int i =0; i < matrix.length ; i++){for(int j =0; j < matrix[i].length ; j++){
max =Math.max(max,maxAscLength(matrix,i,j,maxPath));}}return max;}privateintmaxAscLength(int[][] matrix ,int i ,int j ,int[][] maxPath){if(0!= maxPath[i][j])return maxPath[i][j];int[][] dirs =newint[][]{{-1,0},{1,0},{0,-1},{0,1}};int max =1;for(int[] dir : dirs){int x = dir[0]+ i , y = dir[1]+ j;if(x >=0&& x < matrix.length && y >=0&& y < matrix[i].length && matrix[i][j]< matrix[x][y])
max =Math.max(max,maxAscLength(matrix,x,y,maxPath)+1);}
maxPath[i][j]= max;return max;}}