给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
用dfs去搜索,像二叉树搜索深度一样,到边界就返回。
class Solution {
public int longestIncreasingPath(int[][] matrix) {
if(matrix.length == 0){
return 0;
}
int[][] record = new int[matrix.length][matrix[0].length];
for(int i = 0;i < matrix.length;i++){
for(int j = 0;j < matrix[0].length;j++){
dfs(record,matrix,i,j,-1);
}
}
int max = Integer.MIN_VALUE;
for(int i = 0;i < record.length;i++){
for(int j = 0;j < record[0].length;j++){
max = Math.max(record[i][j],max);
//System.out.print(record[i][j] + " ");
}
//System.out.println();
}
return max;
}
private int dfs(int[][] record,int[][] matrix,int i,int j,int tar){
if(i < 0 || j < 0 || i > matrix.length - 1 || j > matrix[0].length - 1 || matrix[i][j] <= tar){
return 0;
}
if(record[i][j] != 0)
return record[i][j];
int[][] dis = {{0,1},{1,0},{-1,0},{0,-1}};
for(int k = 0;k < 4;k++){
int temp = dfs(record,matrix,i + dis[k][0],j + dis[k][1],matrix[i][j]) + 1;
record[i][j] = Math.max(temp,record[i][j]);
}
return record[i][j];
}
}