文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 记忆化递归
    • 2.2 拓扑排序

1. 题目

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 记忆化递归

class Solution {int m, n;int longest = 1;vector<vector<int>> dir = {{-1,0},{1,0},{0,1},{0,-1}};
public:int longestIncreasingPath(vector<vector<int>>& mat) {if(mat.empty() || mat[0].empty())return 0;m = mat.size(), n = mat[0].size();vector<vector<int>> s(m, vector<int>(n,0));for(int i = 0, j; i < m; ++i)for(j = 0; j < n; ++j){if(s[i][j] != 0)//走过的路不走continue;longest = max(longest, dfs(i,j,mat,s));}return longest;}int dfs(int i, int j, vector<vector<int>>& mat, vector<vector<int>>& s){if(s[i][j] != 0)return s[i][j];int x, y, k, longestpathofnext = 0;for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && mat[i][j] > mat[x][y]){longestpathofnext = max(longestpathofnext, dfs(x,y,mat,s));}}return s[i][j] = 1+longestpathofnext;}
};

76 ms 14.1 MB

2.2 拓扑排序

见官方解答

  • 找到周围点比我小的,入度+1,统计一遍
  • 入度为0的全部入队列,BFS的最大层数为最长路径长度

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 329. 矩阵中的最长递增路径(记忆化递归)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. Leetcode--329. 矩阵中的最长递增路径

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

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

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

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

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

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

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

最新文章

  1. 海南大学植物保护学院刘铜教授课题组招聘简介
  2. Linux系统平台上软件安装心得
  3. vim 使用技巧 转载
  4. 万网 php session,Session
  5. sylog mysql_25.2 配置使用基于mysql存储日志信息
  6. vue饼图组件_vue2.0 自定义 饼状图 (Echarts)组件
  7. java.util.stream.DoubleStream
  8. Deepin在matlab的安装
  9. 1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程
  10. UNIX网络编程的5种IO模型
  11. Postman下载与安装操作步骤(只有两步骤下载)
  12. 第二章 装配bean
  13. 7.腾讯微博Android客户端开发——自动获取验证码(1)
  14. 惠普M1136 MFP激光打印机打印整张纸全黑
  15. 简述分布式锁的3种实现方式
  16. Tiled地图编辑器 Tiled Map Editor 的使用(二)动画效果
  17. 在vue中实现单页面打印之cdn引入打印
  18. 在线相册 ,图片上传, 基于 Spring boot vuejs element ui mysql 的项目
  19. [转]用Hadoop,还是不用Hadoop?
  20. ubuntu突然显卡消失

热门文章

  1. 解决:SyntaxError: Non-UTF-8 code starting with '\xe6' in file
  2. SparkHiveSQL中Join操作的谓词下推?
  3. 找出无序数组最小的K个数(基于快排,效率高)
  4. java事件类_关于Java事件类的一些思考
  5. 每周分享之cookie详解
  6. jQuery$命名冲突问题解决方法
  7. hadoop环境安装及简单Map-Reduce示例
  8. 发布ASP.NET程序至IIS7
  9. 一个简单又高效的日志系统
  10. Ubuntu 10.10 下配置Telnet服务器