【leetcode-动态规划】矩阵中的最长递增路径

题目:

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

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

示例 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]

。注意不允许在对角线方向上移动。

思路:

DFS+dp

1、dp[i][j]表示数组中以(i,j)为起点的最长递增路径的长度,初始将dp数组都赋为0,

2、递归调用时,遇到某个位置(x, y), 如果dp[x][y]不为0的话,我们直接返回dp[x][y]即可,不需要重复计算。

3、以数组中每个位置都为起点调用递归来做,比较找出最大值。在以一个位置为起点用DFS搜索时,对其四个相邻位置进行判断,

如果相邻位置的值大于上一个位置,则对相邻位置继续调用递归,并更新一个最大值,搜素完成后返回即可。

java代码:

class Solution {

private int[][] paths = {{0,1},{0,-1},{1,0},{-1,0}};

public int longestIncreasingPath(int[][] matrix) {

if (matrix == null || matrix.length <= 0 || matrix[0].length <= 0) {

return 0;

}

int max = 0;

int row = matrix.length;

int col = matrix[0].length;

int[][] dp = new int[row][col];

for (int i=0; i

for (int j=0; j

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

}

}

return max;

}

private int dfs(int[][] matrix, int[][] dp, int row, int col, int i, int j) {

if (dp[i][j] > 0) {

return dp[i][j];

}

int max = 1;

for (int[] path : paths) {

int x = i + path[0];

int y = j + path[1];

// 可以继续搜索

if (x >= 0 && x = 0 && y < col && matrix[x][y] > matrix[i][j]) {

int len = 1 + dfs(matrix, dp, row, col, x, y);

max = Math.max(max, len);

}

}

dp[i][j] = max;

return max;

}

}

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

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

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

  2. python找到一行单词中最长的_如何在文本文件中找到最长的单词?

    当前代码返回文本文件中最长的一行,即句号. 如果您想要最长的一行是某个输入字符串的anagram,则需要获取一个输入字符串,并过滤掉不是anagram的行. 因为您指定了不存在重复字母,所以检查两个单 ...

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

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

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

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

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

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

  6. LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)

    LeetCode--5757. 矩阵中最大的三个菱形和[Get Biggest Three Rhombus Sums in a Grid][中等]--分析及代码[Java] 一.题目 二.分析及代码 ...

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

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

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

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

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

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

最新文章

  1. 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译
  2. 余额宝技术架构读后感
  3. sqlserver查询自定义的函数
  4. 如何用Asp判断你的网站的虚拟物理路径
  5. MySQL 语句外键 连接
  6. [vue] 你们项目为什么会选vue而不选择其它的框架呢?
  7. linux查看hid设备,linux hid设备读写
  8. winform + INotifyPropertyChanged + IDataErrorInfo + ErrorProvider实现自动验证功能
  9. 数字全息实验-实例演示
  10. NoSQL数据库原理与应用
  11. 苏州大学与东华大学计算机哪个好,选哪所大学好?东华大学和苏州大学对比
  12. IE(11)浏览器清理缓存方法
  13. fir302c虚拟服务器,斐讯 FIR302C 无线路由器WDS无线桥接设置
  14. 办公协同:xmind8案例实战班-Array老师-专题视频课程
  15. 程序员工资真的很高么,月入几万的难道不是吹牛?
  16. 华为云--欧拉操作系统
  17. 实验七 磁盘调度算法的模拟与实现
  18. C#个人博客系统源码(前台+后台管理)
  19. 积木Sketch插件进阶开发指南
  20. 有关DLNA的一个讲座

热门文章

  1. 水滴石穿C语言之声明的语法
  2. 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了
  3. 抱歉,程序员的工作不能用时间来衡量
  4. 性能优化(8):使用javascript缓存查询结果
  5. bond4 交换机配置_CentOS 网卡配置bond4(LACP)
  6. c语言数组如何把一串数字存入数组_C语言经典编程题(下)
  7. 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
  8. Awesome Bioinformatics:假期了,收藏学习吧!
  9. Nat Commun|单细胞ATAC-seq深度学习工具包AtacWorks,简单、高效且适用
  10. Nature重磅综述|关于RNA-seq,你想知道的都在这(续)