算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数

题目要求

在这里插入图片描述

解题思路

网格图 DFS
从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走,如果走一步后,没有出界,且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j],则可以走,继续递归。

在递归过程中,记录能访问到的最大列号,作为答案。

代码实现时,为避免重复递归之前访问过的格子,可以用一个 v i s vis vis数组标记访问过的格子。但实际上,可以把 g r i d [ i ] [ j ] grid[i][j] grid[i][j]置为 0 0 0从而无需创建 v i s vis vis数组。这是因为网格值均为正数,并且我们只能访问到比当前格子值更大的格子,所以置为 0 0 0会导致永远无法访问到该格子,这正是我们所希望的。

代码

class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m,n = len(grid), len(grid[0])
        ans = 0
        def dfs(i,j):
            nonlocal ans
            ans = max(ans,j)
            if ans == n -1:
                return
            for k in i-1, i, i+1:
                if 0<= k <m and grid[k][j+1] >grid[i][j]:
                    dfs(k,j+1)
            grid[i][j] = 0
        for i in range(m):
            dfs(i,0)
        return ans

复杂度分析

  • 时间复杂度: O ( m n ) O(mn) O(mn),其中 m m m n n n 分别为 g r i d grid grid 的行数和列数。每个格子至多递归一次。
  • 空间复杂度: O ( n ) O(n) O(n)。递归需要 O ( n ) O(n) O(n)的栈空间。

参考

灵茶山艾府

相关推荐

  1. leetcode2684--矩阵移动次数

    2024-03-19 14:18:02       44 阅读
  2. 2684. 矩阵移动次数

    2024-03-19 14:18:02       46 阅读
  3. 网格bfs,LeetCode 2684. 矩阵移动次数

    2024-03-19 14:18:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 14:18:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 14:18:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 14:18:02       87 阅读
  4. Python语言-面向对象

    2024-03-19 14:18:02       96 阅读

热门阅读

  1. 【已解决】c++ qt如何动态隐藏tabwidget中tab页

    2024-03-19 14:18:02       37 阅读
  2. Qt散文一

    2024-03-19 14:18:02       39 阅读
  3. 【Linux】cat & vim 命令存在着什么区别?

    2024-03-19 14:18:02       37 阅读
  4. LC 热题 100:数组与矩阵的探索之旅

    2024-03-19 14:18:02       34 阅读
  5. PostgreSQL和MySQL的异同

    2024-03-19 14:18:02       42 阅读
  6. 关于BFF

    2024-03-19 14:18:02       39 阅读
  7. ES6数组判断以及原始值转换

    2024-03-19 14:18:02       44 阅读
  8. redis cpu百分百问题

    2024-03-19 14:18:02       36 阅读