记忆化dfs 用dp数组保存每次dfs的结果,下次直接拿出来用
class Solution {
int [][]dp = new int[210][210];
int [][] ma;
int []ofx = {1,-1,0,0};
int []ofy = {0,0,1,-1};
int n,m;
int ans = 0 ;
public int longestIncreasingPath(int[][] matrix) {
n = matrix.length;
m = matrix[0].length;
ma = matrix;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(dp[i][j]==0)
dp[i][j] = dfs(i,j);
ans = Math.max(ans,dp[i][j]);
// System.out.println(i+" "+j+" "+dp[i][j]);
}
}
return ans;
}
public int dfs(int x,int y){
if(dp[x][y] != 0)
return dp[x][y];
dp[x][y] = 1;
for(int i=0;i<4;i++){
int newx = x+ofx[i];
int newy = y+ofy[i];
if(newx >=0 && newx < n && newy>=0 && newy < m){
if(ma[newx][newy]<ma[x][y]){
if(dp[newx][newy] == 0)
dfs(newx,newy);
dp[x][y] = Math.max(dp[x][y],dp[newx][newy]+1);
}
}
}
return dp[x][y];
}
}