329. Longest Increasing Path in a Matrix
class Solution { public int longestIncreasingPath(int[][] matrix) { if (matrix.length == 0) return 0; int max = Integer.MIN_VALUE; int [][] mem = new int[matrix.length][matrix[0].length]; for (int i = 0; i < matrix.length; i++) Arrays.fill(mem[i], 0); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { max = Math.max(max,helper(i, j, mem,matrix)); } } return max; } public int helper(int x, int y, int[][] mem, int[][] matrix) { if (mem[x][y] != 0) { return mem[x][y]; } int[] dx = { 0, 1, -1, 0 }; int[] dy = { 1, 0, 0, -1 }; for (int i = 0; i = 0 && newX = 0 && newY matrix[x][y]) { mem[x][y] = Math.max(mem[x][y], helper(newX, newY,mem, matrix)); } } return ++mem[x][y]; } }