zoukankan      html  css  js  c++  java
  • 7.26 矩阵中的最长递增路径

    329. 矩阵中的最长递增路径
    给定一个整数矩阵,找出最长递增路径的长度。
    
    对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
    
    示例 1:
    
    输入: nums = 
    [
      [9,9,4],
      [6,6,8],
      [2,1,1]
    ] 
    输出: 4 
    解释: 最长递增路径为 [1, 2, 6, 9]。
    示例 2:
    
    输入: nums = 
    [
      [3,4,5],
      [3,2,6],
      [2,2,1]
    ] 
    输出: 4 
    解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
    通过次数19,623提交次数45,557
    
    class Solution {
        int cnt = 0;
        int[][]dirs = {{0,1},{0,-1},{1,0},{-1,0}};
        public int longestIncreasingPath(int[][] matrix) {
            if(matrix.length==0 || matrix[0]==null) return 0;
            int m = matrix.length;//行
            int n = matrix[0].length;//列
            int [][] memo = new int[m][n];
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    dfs(matrix,m,n,i,j,memo);
                }
            }
            return cnt;
        }
    
        private int dfs(int[][] matrix,int m,int n, int i, int j,int [][] memo){
            if(memo[i][j]!=0){
                if(memo[i][j]>cnt) cnt=memo[i][j];
                return memo[i][j];
            }
            memo[i][j]++;
            for(int[] dir : dirs){
                int newrow = i+dir[0];
                int newcolumn = j+dir[1];
                if(newrow>=0 && newrow<m && newcolumn>=0 && newcolumn<n && matrix[newrow][newcolumn]>matrix[i][j]){
                    memo[i][j] = Math.max(memo[i][j], dfs(matrix,m,n,newrow,newcolumn,memo)+1);
                }
            }
            if(memo[i][j]>cnt) cnt=memo[i][j];
            return memo[i][j];
        }
    }
    
  • 相关阅读:
    python
    python
    python
    Django学习手册
    python
    Django学习手册
    [ThinkPHP] 独立分组配置,坑!!!
    vim 代码片段:通过vundle插件管理器安装ultisnips |centos6.5|vim7.2
    CESHI
    thinkphp实现功能:验证码
  • 原文地址:https://www.cnblogs.com/athony/p/13379590.html
Copyright © 2011-2022 走看看