力扣算法题链接:
https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/
给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。
解题方法:深度优先遍历+记忆举证
memo:用来存放结果的记忆矩阵
public int[][] dirs = {{-1,0},{1,0},{0,1},{0,-1}};//记录方向
public int rows,columns;//全局行列数
public int longestIncreasionPath(int[][] matrix){
if(matrix == null|| matrix.length == 0 || matrix[0].length == 0){
return 0;
}
int ans = 0;//结果
rows = matrix.length;
columns = matrix[0].length;
//创建记忆矩阵,用来记录长度
int[][] memo = new int[rows][columns];
for(int i = 0;i < rows;i++){
for (int j = 0;j < columns;j++){
ans = Math.max(ans,dfs(matrix,i,j,memo));
}
}
return ans;
}
private int dfs(int[][] matrix, int row, int column, int[][] memo) {
if(memo[row][column] != 0){
//如果当前记忆矩阵部位0,说明已经搜索计算过递归的长度了
return memo[row][column];
}
//如果为0;就增加1代表起始长度为1
memo[row][column]++;
//进行上下左右移动
for (int[] dir : dirs) {
int newRow = row + dir[0];
int newColumn = column + dir[1];
if(newRow >= 0 && newRow < rows && newColumn >= 0&&newColumn < columns && matrix[newRow][newColumn] > matrix[row][column]){
memo[row][column] = Math.max(memo[row][column],dfs(matrix,newRow,newColumn,memo)+1);
}
}
return memo[row][column];
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
想养一只猫。
浙公网安备 33010602011771号