剑指 Offer II 112. 最长递增路径(困难 图 dfs 动态规划)

本文详细介绍了如何解决剑指 Offer II 112问题,即在一个给定的矩阵中找到最长的递增路径。通过将矩阵视为有向无环图,并结合深度优先搜索和动态规划策略,避免重复路径并找到最优解。具体解决方案包括创建辅助数组记录最长路径,并在DFS过程中更新路径长度。
摘要由CSDN通过智能技术生成

剑指 Offer II 112. 最长递增路径

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

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

示例 1:

在这里插入图片描述

输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4
解释:最长递增路径为 [1, 2, 6, 9]。
示例 2:

在这里插入图片描述

输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]
输出:4
解释:最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
示例 3:

输入:matrix = [[1]]
输出:1

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 200
0 <= matrix[i][j] <= 231 - 1

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

分析

1、题目要求按照递增的路径走,那么整个矩阵可以看成有向无环图,要求最长的路径,使用深度优先搜索。由于图是无环的,所以不必记录访问过的节点,因为不可能重复访问。
2、题目是找最长的递增路径,我们需要遍历整个矩阵找到每个节点的最长路径,为了避免遍历重复的路径,可以创建一个跟矩阵相同大小的数组 lengths 用来记录已经走过的节点对应的最长路径。
3、dfs 方法搜索思路:首先递归的返回条件是 lengths[i][j] != 0,即节点 (i, j) 处的最长路径已经找到了,可以返回了,返回 lengths[i][j];如果还没找到就进行寻找,用变量 length 记录最长的路径,初始值为 1,因为路径最小为 1,对 (i ,j) 的上下左右四个方向进行判断,对于大于节点 (i, j) 的值的方向进行递归直到递增路径的终点(或者到达已经被记录的节点,在递归的开始会直接返回,类似动态规划的思想),在完成所有的递归后,length 应该为我们要找的最长路径,赋值 lengths[i][j] = length 即可。

题解(Java)

class Solution {
   
    private int[][] dirs = {
   {
   -1, 0}, <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值