力扣每日一题 2024/3/16 矩阵中移动的最大次数

前言:首先这个系列不一定会连续更新下去 也许会断更 目前只打算更新每日一题的easy和medium难度 会逐步讲解每一行代码的思路

题目描述

用例说明

思路讲解

最外层遍历:将第一列的每一个元素看作一次遍历的起点(初始值)

返回值是移动的最大次数 用ans来存储

很容易想到用深度优先搜索 dfs内的参数是什么呢?首先得有横纵坐标,以及整个二维矩阵,ans可以定义为全局变量,不必再加入dfs内。

dfs内的处理逻辑:首先需要更新ans,ans的值和横坐标取最大值 最大不超过矩阵的长度

dfs的本质是递归 递归的出口就是当走到矩阵右边界的时候 即ans==grid[0].length-1

dfs(i,0,gird)是指从(i,0)坐标开始找符合位置条件的且值比他大的下一个元素

由于走动的格子受到方向的限制,只能走右上,右下和右,所有在遍历的时候需要对始末位置取最大最小值,最小不能小于0,最大不能大于数组列的长度

当前节点深度优先搜索之后需要将其中的值置0表示已经访问过了

代码

class Solution {
    int ans;
    public int maxMoves(int[][] grid) {
      for(int i=0;i<grid.length;i++){
        dfs(i,0,grid);
      }
      return ans;
    }
    public void dfs(int i,int j,int[][] grid){
        ans=Math.max(ans,j);
        if(ans==grid[0].length-1){
            return;
        }
        for(int k=Math.max(i-1,0);k<Math.min(i+2,grid.length);k++){
            if(grid[k][j+1]>grid[i][j]){
                dfs(k,j+1,grid);
            }
        }
        grid[i][j]=0;
    }
}

复杂度

时间复杂度O(mn)

空间复杂度O(n)

相关推荐

  1. 2024.3.16每日——矩阵移动次数

    2024-03-19 15:06:04       16 阅读
  2. leetcode2684--矩阵移动次数

    2024-03-19 15:06:04       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 15:06:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 15:06:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 15:06:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 15:06:04       20 阅读

热门阅读

  1. Leetcode 389. Find the Difference

    2024-03-19 15:06:04       19 阅读
  2. Linux 常用指令

    2024-03-19 15:06:04       23 阅读
  3. 密码学——数字签名

    2024-03-19 15:06:04       20 阅读
  4. 基于ubuntu搭建qemu+risc-v虚拟机流程详细说明

    2024-03-19 15:06:04       17 阅读
  5. Python教程:Python安装目录说明

    2024-03-19 15:06:04       19 阅读
  6. Pillow教程:翻转图像

    2024-03-19 15:06:04       21 阅读
  7. 【无标题】

    2024-03-19 15:06:04       19 阅读
  8. 爬虫加密算法

    2024-03-19 15:06:04       20 阅读
  9. 「Linux系列」聊聊vi/vim的3种命令模式

    2024-03-19 15:06:04       21 阅读
  10. Golang案例开发之gopacket监听网卡抓包(2)

    2024-03-19 15:06:04       19 阅读