矩阵最长递增路径

深搜+dp即可。

  private int[][] dirs=new int[][]{{-1,0},{1,0},{0,-1},{0,1}};
    private int m,n;
    public int solve (int[][] matrix) {
        // write code here

        if(matrix.length==0||matrix[0].length==0) return 0;
        m=matrix.length;
        n=matrix[0].length;
        int res=0;
        int[][] dp=new int[m+1][n+1];
        for (int i=0;i<m;i++){
            for (int j=0;j<n;j++){

                res=Math.max(res,dfs(matrix,dp,i,j));

            }
        }

        return res;
    }
    public int dfs(int[][] matrix,int[][] dp,int i,int j){

        if(dp[i][j]!=0) return dp[i][j];
        dp[i][j]++;

        for (int k=0;k<4;k++){
            int nexti=i+dirs[k][0];
            int nextj=j+dirs[k][1];

            if(nexti>=0&&nexti<m&&nextj>=0&&nextj<n&&matrix[nexti][nextj]>matrix[i][j]){
                dp[i][j]=Math.max(dp[i][j],dfs(matrix,dp,nexti,nextj));
            }
        }
        return dp[i][j];
    }
全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务