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

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

示例 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]。注意不允许在对角线方向上移动。

思路:可以看作有向图,在点(i,j)相邻的四个点中,从低的值到高的值有一条边

通过深度优先遍历可以解决,但是时间复杂度极高,因此想办法将找过的记录存下来,记忆化搜索。

dp[i][j]!=0时,表示被搜索过

class Solution {private int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}};public int dfs(int dp[][],int matrix[][],int i,int j){if(dp[i][j]!=0){return dp[i][j];}dp[i][j]++;for(int[] ints : dir){int row = i+ints[0];int column = j+ints[1];if(row>=matrix.length||row<0||column<0||column>=matrix[0].length){continue;}if(matrix[i][j]<matrix[row][column]){dp[i][j] = Math.max(dp[i][j],dfs(dp,matrix,row,column)+1);}}return dp[i][j];}public int longestIncreasingPath(int[][] matrix) {if(matrix.length==0||matrix[0].length==0){return 0;}int dp[][]  = new int[matrix.length][matrix[0].length];int max = -2147483647>>1;for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[0].length;j++){max = Math.max(max,dfs(dp,matrix,i,j));}}return max;}
}

Leetcode--329. 矩阵中的最长递增路径相关推荐

  1. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  2. 329. 矩阵中的最长递增路径

    2020-06-09 1.题目描述 矩阵中的最长递增路径 2.题解 在这里我们可以将其视作有向图,如果当前的数比其四周位置上的数要小的话,就构建一条从当前数指向其 周围的边,要求得最长的递增路径,那么 ...

  3. 329 矩阵中的最长递增路径

    题目描述: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = ...

  4. 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...

  5. 矩阵中的最长递增路径

    矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...

  6. java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径

    [leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...

  7. 算法-------矩阵中的最长递增路径(Java版本)

    题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...

  8. leetcode329. 矩阵中的最长递增路径(dfs)

    给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...

  9. leetcode329. 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums =  [   ...

最新文章

  1. 比 ELK 更简洁、高效!企业级日志平台后起之秀 Graylog!
  2. 深度学习帮助人工智能走得更远
  3. ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前...
  4. 上千个电脑文件怎么搬?用Python一键复制移动
  5. linux进程查看所有线程,Linux中查看进程的多线程的方法
  6. 如何求matlab的in(2.0375),matlab2012年课后习题及答案详解
  7. 用python绘制图形_python绘制图形
  8. Windows用户安全小技巧
  9. YbOJ-网格序列【拉格朗日插值】
  10. 查看文件二进制编码_小白也能学会系列:用python文件读写代码实例!(简单案例)...
  11. linux系统优化 io,Linux硬件IO的优化简介
  12. [参考]查看ORACLE DB信息的一些SQL
  13. Spring Autowiring @Qualifier example
  14. libpython3.7m so静态库_libpython3.7m.dll
  15. Blocks的申明调用与Queue当做锁的用法
  16. Smart View 11.1.2.5配置共享连接
  17. matlab u 上波浪线,波浪线如何居中,在excel中怎样输入在文字中部加波浪线
  18. 【小强推歌】---奥斯卡金曲MP3[下载]
  19. 商务办公软件应用与实践【8】
  20. 华为路由器负载均衡_华为 AR路由 策略路由 多WAN环境下指定出口

热门文章

  1. 程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)
  2. LeetCode 1366. 通过投票对团队排名(自定义排序)
  3. 字符串匹配算法(AC自动机 Aho-Corasick)
  4. mac node oracle,将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)
  5. java继承序列化_java中序列化之子类继承父类序列化
  6. 李宏毅机器学习(一)基本概念介绍
  7. 新手手册:Pytorch分布式训练
  8. 从逻辑回归到神经网络
  9. 深度学习及AR在移动端打车场景下的应用
  10. 最强Java面试题全部合集,涵盖BAT大厂面试必考的9大技术!-强烈建议收藏