# 0329. Longest Increasing Path in a Matrix ###### tags: `Leetcode` `Medium` `DFS+Memorization` Link: https://leetcode.com/problems/longest-increasing-path-in-a-matrix/ ## 思路 和[2328. Number of Increasing Paths in a Grid](https://hackmd.io/nsHcqQhPTOCJE32B2RX5vA)很像 我们从任意点A开始递归寻找各条递增路径,最终返回的时候记录从A为起点时的最长路径长度。将此结果记忆化,这样当对其他点进行DFS的时候,如果递归调用到dfs(A)就直接返回结果。 ## Code ```java= class Solution { public int longestIncreasingPath(int[][] matrix) { int m = matrix.length, n = matrix[0].length; int[][] cache = new int[m][n]; int maxLen = 0; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ int len = dfs(matrix, i, j, cache); maxLen = Math.max(maxLen, len); } } return maxLen; } private int dfs(int[][] matrix, int x, int y, int[][] cache){ int[][] dirs = new int[][]{{-1,0}, {1,0}, {0,1}, {0,-1}}; if(cache[x][y]!=0) return cache[x][y]; int m = matrix.length; int n = matrix[0].length; int maxLen = 1; for(int[] dir:dirs){ int nextx = x+dir[0]; int nexty = y+dir[1]; if(nextx>=0 && nextx<m && nexty>=0 && nexty<n && matrix[nextx][nexty]>matrix[x][y]){ maxLen = Math.max(maxLen, 1+dfs(matrix, nextx, nexty, cache)); } } return cache[x][y] = maxLen; } } ```