Longest increasing path in a matrix - Teeeeeebag/LeetCode GitHub Wiki
- Memorized DFS
public class Solution {
private int getDepth(int[][] matrix, int x, int y, int[][] cnt){
if (cnt[x][y] != 0){
return cnt[x][y];
}
int crtCnt = 1;
if (x-1>=0 && matrix[x][y] > matrix[x-1][y]){
crtCnt = Math.max(getDepth(matrix, x-1, y, cnt)+1, crtCnt);
}
if (x+1 < matrix.length && matrix[x][y] > matrix[x+1][y]){
crtCnt = Math.max(getDepth(matrix, x+1, y, cnt)+1, crtCnt);
}
if (y-1>=0 && matrix[x][y] > matrix[x][y-1]){
crtCnt = Math.max(getDepth(matrix, x, y-1, cnt)+1, crtCnt);
}
if (y+1 < matrix[0].length && matrix[x][y] > matrix[x][y+1]){
crtCnt = Math.max(getDepth(matrix, x, y+1, cnt)+1, crtCnt);
}
cnt[x][y] = crtCnt;
return crtCnt;
}
public int longestIncreasingPath(int[][] matrix) {
if (matrix.length == 0 || matrix[0].length == 0){
return 0;
}
int[][] cnt = new int[matrix.length][matrix[0].length];
int maxLen = 1;
for (int i=0; i<matrix.length; ++i){
for (int j=0; j<matrix[0].length; ++j){
maxLen = Math.max(maxLen, getDepth(matrix, i, j, cnt));
}
}
return maxLen;
}
}