LeetCode_329矩阵中的最长递增路径

给定一个整数矩阵,找出最长递增路径的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
在这里插入图片描述

class Solution {
    public int longestIncreasingPath(int[][] matrix) {
        int row = matrix.length;
        if(row<1) return 0;
        int col = matrix[0].length;
        if(col<1) return 0;
        int res = 0;
        Map<String,Integer> map = new HashMap<String,Integer>();
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                int value = dfs(i,j,matrix,map);
                res = Math.max(res,value);
            }
        }
        return res;
    }

    public int dfs(int i, int j, int[][] matrix, Map<String,Integer> map){
        if(map.containsKey(i+"_"+j)){
            return map.get(i+"_"+j);
        }
        int row = matrix.length;
        int col = matrix[0].length;
        int res = 1;
        int num1 = 0;
        int num2 = 0;
        int num3 = 0;
        int num4 = 0;
        if(i-1>=0 && j<col && matrix[i][j]<matrix[i-1][j]){//上方向
            if(map.containsKey((i-1)+"_"+j)){
                num1 = map.get((i-1)+"_"+j);
            }else{
                num1 = dfs(i-1,j,matrix,map);
            }
        }
        if(i+1<row && j<col && matrix[i][j]<matrix[i+1][j]){//下方向
            if(map.containsKey((i+1)+"_"+j)){
                num2 = map.get((i+1)+"_"+j);
            }else{
                num2 = dfs(i+1,j,matrix,map);
            }
        }
        if(i<row && j-1>=0 && matrix[i][j]<matrix[i][j-1]){//左方向
            if(map.containsKey(i+"_"+(j-1))){
                num3 = map.get(i+"_"+(j-1));
            }else{
                num3 = dfs(i,j-1,matrix,map);
            }
        }
        if(i<row && j+1<col && matrix[i][j]<matrix[i][j+1]){//右方向
            if(map.containsKey(i+"_"+(j+1))){
                num4 = map.get(i+"_"+(j+1));
            }else{
                num4 = dfs(i,j+1,matrix,map);
            }
        }
        int max = Math.max(num1,num2);
        max = Math.max(max,num3);
        max = Math.max(max,num4);
        res = res+max;
        map.put(i+"_"+j,res);
        return res;
    }
}
发布了250 篇原创文章 · 获赞 0 · 访问量 1239

猜你喜欢

转载自blog.csdn.net/qq_36198826/article/details/103986075