题解 | #矩阵最长递增路径#

矩阵最长递增路径

https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 
     * dp数组记录[i,j]处的最长递增路径递增路径长度
     * 以数组中每个元素为起点(四个方向),统计最长长度
     * 
     * @param matrix int整型二维数组 描述矩阵的每个数
     * @return int整型
     */
    public int solve(int[][] matrix) {
        int row = matrix.length;
        if (row == 0) return 0;
        int col = matrix[0].length;
        int maxValue = 0;
        // i,j 处的单元格拥有的最长递增路径
        int[][] dp = new int[row][col];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                maxValue = Math.max(maxValue, dfs(matrix, dp, i, j, row, col));
            }
        }
        return maxValue;
    }

    private int dfs(int[][] matrix, int[][] dp, int i, int j, int row,
                           int col) {
        if (dp[i][j] != 0) return dp[i][j];
        dp[i][j]++;
        // 向右
        if (j + 1 < col && matrix[i][j + 1] > matrix[i][j]) {
            dp[i][j] = Math.max(dp[i][j], dfs(matrix, dp, i, j + 1, row, col) + 1);
        }
        // 向左
        if (j - 1 >= 0 && matrix[i][j - 1] > matrix[i][j]) {
            dp[i][j] = Math.max(dp[i][j], dfs(matrix, dp, i, j - 1, row, col) + 1);
        }
        // 向上
        if (i - 1 >= 0 && matrix[i - 1][j] > matrix[i][j]) {
            dp[i][j] = Math.max(dp[i][j], dfs(matrix, dp, i - 1, j, row, col) + 1);
        }
        // 向下
        if (i + 1 < row && matrix[i + 1][j] > matrix[i][j]) {
            dp[i][j] = Math.max(dp[i][j], dfs(matrix, dp, i + 1, j, row, col) + 1);
        }
        return dp[i][j];
    }
}

全部评论

相关推荐

起名字真难233:人家只有找猴子的预算,来个齐天大圣他们驾驭不住呀😂😂
点赞 评论 收藏
分享
03-11 18:00
辽宁大学 安卓
这怎么还花钱买上了.....
不愿吃饼的变色龙很感性:没事,我不是目标院校,练花钱的机会都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务