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

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

方法1:使用带记忆路径的深度搜索
主要思路:
(1)从原数组中的每个点出发,所能达到的最长的路径值是固定的,为了避免在深度搜索过程中,对每个点的最长路径进行重复搜索,对搜索过的路径进行记录;
(2)定义和原数组同样大小的数组来记录每个点的最大路劲长度,初始值为0,若搜索到某个结点,其值不为零,说明已经搜索过了,可以直接返回结果,否则对当前结点的路径值自增一,然后逐个判断上,下,左,右四个方向上的路径值,并和当前值进行比较,获得最大路径长度值;

class Solution {public:int dfs(vector<vector<int>>& matrix,vector<vector<int>>& visited_pos,int row,int col){//若当前位置计算过最大路径值,既非零,则直接返回if(visited_pos[row][col])return visited_pos[row][col];++visited_pos[row][col];//路径值加1//通过当前位置的上边结点可能达到的最大路径值if(row>0&&matrix[row-1][col]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row-1,col)+1);//通过当前位置的下边结点可能达到的最大路径值if(row<matrix.size()-1&&matrix[row+1][col]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row+1,col)+1);//通过当前位置的左边结点可能达到的最大路径值if(col>0&&matrix[row][col-1]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row,col-1)+1);//通过当前位置的右边结点可能达到的最大路径值if(col<matrix[0].size()-1&&matrix[row][col+1]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row,col+1)+1);return visited_pos[row][col];}int longestIncreasingPath(vector<vector<int>>& matrix) {//排除特殊的情形if(matrix.empty()||matrix[0].empty()){return 0;}int max_len=0;//存储最大路径值//存储各个位置处的最大路径值vector<vector<int>> visited_pos(matrix.size(),vector<int>(matrix[0].size(),0));//对原数组的每个位置求取其最大路径值for(int i=0;i<matrix.size();++i){for(int j=0;j<matrix[0].size();++j){max_len=max(max_len,dfs(matrix,visited_pos,i,j));//更新可能的最大路径值}}return max_len;}
};

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

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

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

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

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

  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. JAVA 多线程实现包子铺(买包子,吃包子)
  2. python模块学习---cmd
  3. Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)
  4. sed 删除windows下的CR/LF
  5. linux memcached 运行,linux下查看Memcached运行状态
  6. java android上传文件_Java-Android-如何将txt文件上传到网站?
  7. mongodb数组操作符
  8. C++新特性探究(18.1):C++11 shared_ptr智能指针
  9. 【很好的分享】zookeeper系列
  10. HG255d 刷最新openwrt Pandorabox并安装njit拨号
  11. MATLAB信号处理仿真入门实验
  12. STM32开源代码——TM1637四位数码管
  13. android删除sdcard文件系统,Android 5.0+删除Sdcard文件
  14. Python代码写好了怎么运行?
  15. 优化问题-Lagrange函数和共轭函数
  16. 机器学习面试问题汇总
  17. BootLoader这个玩意
  18. [ACM]【map/分治】厦大月赛 环鸽的CHONG
  19. 统计学中的均值、方差、协方差
  20. 2014-百度 阿里 华为笔试题

热门文章

  1. 非法破坏计算机系统罪宣判,以非法经营罪提起公诉。法庭未当庭宣判。为什么不会被定破坏计算机信息系统罪呢?...
  2. matlab程序 直线插补,无聊写matlab仿真直线插补算法
  3. android 控制POS机图文打印(一)
  4. 期货开户客户经理一对一专业服务指导
  5. Z怎样写系统测试报告(A)
  6. 计应121--实训一【李智飞(27号)--李阳持(26号)--胡俊琛(13号)--曹吉(2号)】
  7. 联想拯救者R7000P2021安装Ubuntu双系统
  8. 第二模块-作业:员工查询程序
  9. 【绝对详细!不好使你顺着网线敲我!】Django3.1在Ubuntu16.04上的部署
  10. MinIO集群怎么接入Prometheus监控?(上)