算法-------矩阵中的最长递增路径(Java版本)
题目
给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 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]。注意不允许在对角线方向上移动。
解决方法:
public class Solution {private static final int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};private int m, n;public int longestIncreasingPath(int[][] matrix) {if (matrix.length == 0) return 0;m = matrix.length; n = matrix[0].length;int[][] cache = new int[m][n];int ans = 0;for (int i = 0; i < m; ++i)for (int j = 0; j < n; ++j)ans = Math.max(ans, dfs(matrix, i, j, cache));return ans;}private int dfs(int[][] matrix, int i, int j, int[][] cache) {if (cache[i][j] != 0) return cache[i][j];//上下左右 加减一通过数组来遍历 而不是手动代码去写 去复制粘贴for (int[] d : dirs) {int x = i + d[0], y = j + d[1];if (0 <= x && x < m && 0 <= y && y < n && matrix[x][y] > matrix[i][j])cache[i][j] = Math.max(cache[i][j], dfs(matrix, x, y, cache));}return ++cache[i][j];}
}
算法-------矩阵中的最长递增路径(Java版本)相关推荐
- 矩阵中的最长递增路径
矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...
- 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...
- java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径
[leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...
- 329. 矩阵中的最长递增路径
2020-06-09 1.题目描述 矩阵中的最长递增路径 2.题解 在这里我们可以将其视作有向图,如果当前的数比其四周位置上的数要小的话,就构建一条从当前数指向其 周围的边,要求得最长的递增路径,那么 ...
- Leetcode--329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
- 329 矩阵中的最长递增路径
题目描述: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = ...
- leetcode329. 矩阵中的最长递增路径(dfs)
给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...
- leetcode329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
最新文章
- 今天买书了《JavaScript 权威指南》英文版
- 小程序仿 axios 请求封装
- SQL和PL/SQL的性能优化之四---联结与子查询
- 制作wordpress页面的学习记录
- cgi python windows_python cgi windows怎么办
- 中国大学mooc慕课python语言程序设计答案_中国大学MOOC(慕课)_Python语言程序设计基础_网课答案...
- 嵌入式C语言编程——.h文件与.c文件
- STL源码剖析 空间配置器 查漏补缺
- C语言单元测试框架-cmocka示例
- 使用python写机器学习算法遇到的问题
- mysql objectid_MongoDB 的objectid和UUID
- 三、地址族与数据序列
- MAC编译lame ld: symbol(s) not found for architecture x86_64/_lame_init_old“, referenced from
- 数学建模--层次分析法
- 读书笔记:程序员的数学 概率统计
- 好玩的ES--第三篇之过滤查询,整合SpringBoot
- Android关机闹钟实现
- 什么是线程阻塞?为什么会出现线程阻塞?
- python携程使用_Python爬虫之携程网笔记一
- 数据分析都不会,你敢玩基金?Python爬取基金并进行对比!
热门文章
- 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...
- android 5.0 模拟sd卡,如何使用为Android5.0(Lolliop)提供的新的SD卡访问API?
- cgo引用定义不一致_应急照明、消防应急照明和疏散指示系统的定义与分类
- php数据更新实例,php mysq数据编辑更新实例_PHP教程
- java 2d划线 刷子_Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS)...
- 1.QT刷新ROS地图画面时,地图画面时不时卡住,甚至整个界面挂掉退出
- Git 2.18版本发布:支持Git协议v2,提升性能
- WPF:Graphics图表--EncodingAndersonDecoding图像编解码(2)
- Oracle 10G DataGuard搭建
- 从dropbox的使用引申想到的系统集成