leetcode hot100岛屿数量

在这里插入图片描述
本题中要求统计岛屿数量(数字1的上下左右均为1,则是连续的1,称为一块岛屿)。那么这种类型题都是需要依靠深度优先搜索(DFS)或者广度优先搜索(BFS)来做的。这两种搜索,实际上都是利用了递归和回溯!(递归三部曲)

本题两种方法都可以,这里采用dfs,我们知道,
首先要确定递归函数的参数,这里我们需要将二维数组grid传入,然后还需要传入一个点的横坐标i以及它的纵坐标j。因为我们只能通过坐标来定位。然后确定返回值,通常返回值都是void。

然后确定终止条件,当我们的点移动到边界上的时候,就该停止了。也就是,i<0或者i>=grid.length或者j<0或者j>=grid[0].length(注意,这里i是横坐标,横坐标的最大也就是二维数组的大小。j是纵坐标,j最大应该是在一行中,也就是二维数组中的一个一维数组的长度,但是不确定当前二维数组有几个一维数组,所以选择grid[0].length)

然后确定单层递归的逻辑,上述的终止条件,一旦触发,则直接return。然后,其他情况,我们首先要把遇到的这块土地上的数据置为0(防止重复遇到)。然后,我们就可以判断这块坐标的上下左右都是不是1(即是否符合题中要求,这里就是递归!

注意:如何体现这个坐标点(i,j)的上下左右呢?
上:(i-1,j)
下:(i+1,j)
左:(i,j-1)
右:(i,j+1)

在函数中之所以用两层for循环是为了遍历二维数组,找寻数字为1的坐标!因为题中并没有给出岛屿的坐标,需要我们首先找到第一个,然后再判断这个坐标旁边的点是否符合,进而继续寻找岛屿!

public int numIslands(char[][] grid) {int res = 0; //记录找到的岛屿数量for(int i = 0;i < grid.length;i++){for(int j = 0;j < grid[0].length;j++){//找到“1”,res加一,同时淹没这个岛if(grid[i][j] == '1'){res++;dfs(grid,i,j);}}}return res;
}
//使用DFS“淹没”岛屿
public void dfs(char[][] grid, int i, int j){//搜索边界:索引越界或遍历到了"0"if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0') return;//将这块土地标记为"0"grid[i][j] = '0';//根据"每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成",对上下左右的相邻顶点进行dfsdfs(grid,i - 1,j);dfs(grid,i + 1,j);dfs(grid,i,j + 1);dfs(grid,i,j - 1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝牙----蓝牙GAP层

蓝牙协议栈----GAP GAP的角色连接过程连接参数 GAP&#xff1a;通用访问配置协议层 gap的角色发现的模式与过程连接模式与过程安全模式与过程 CC2640R2F的GAP层抽象 GAP的角色 Broadcaster 广播电台 -不可连接的广播者。Observer 观察者 -扫描广播者但无法启动连接。Periphe…

降低文件增长和失真的零系数JPEG图像可逆信息隐藏

一、研究概述和意义 随着多媒体技术和网络的迅猛发展&#xff0c;数字媒体的应用越来越广泛。在网络上传输的数字 媒体如音频、文本、视频和图像的内容及数据安全问题也随之而来。伴随着计算机技术发展与普及&#xff0c;数字媒体的机密性、完整性经常受到非法活动的威胁&…

vue中的computed

目录 一&#xff1a;介绍 二&#xff1a;例子演示 一&#xff1a;介绍 在 Vue.js 中&#xff0c;computed 属性是一种特殊类型的属性&#xff0c;它允许你声明依赖于其他数据属性的值。computed 属性的值是通过一个函数计算得出的&#xff0c;这个函数可以在其依赖的数据发生…

深入理解stressapptest

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认三、重要参数详解3.1、查询支持的参数3.2、参数说明 四、实例4.1、随机测试&#xff08;默认模式&#xff09;4.2、循环测试4.2、全内存测试 团队博客: 汽车电子社区 一、概述 stressapptest是一款免费…

HCIA-HarmonyOS设备开发认证-2.设备开发入门

目录 HarmonyOS设备开发学习路径一、开发项目与工具介绍1.1、设备开发环境准备1.2、设备开发流程1.3、Huawei DevEco Device Tool 二、OpenHarmony介绍OpenHarmony目录结构详细介绍applications目录详解base目录详解foundation目录详解 OpenHarmony接口分层介绍CMSIS 和 POSIX …

[每日一题] 01.27 - 斐波那契数列

文章目录 打分斐波那契数列 打分 n int(input()) lis list(map(int,input().split())) a sum(lis) - min(lis) - max(lis) print(round(a / (n - 2),2))斐波那契数列 n int(input()) res [] for i in range(n):res.append(int(input()))Max max(res) lis [1,1] for i in…

nodejs学习计划--(七)express框架

express框架 1. express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB …

Java中的运算符-算数运算符(/,%,+,++)

目录 运算符算数运算符除法 取余运行结果实例测试 的作用的作用测试结果 运算符 算法符号算术运算符&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff08;自增&#xff09;&#xff0c;–&#xff08;自减&#xff09;赋值运算符扩展赋值运算符&…

Qt WebEngine模块使用(开发环境安装和程序开发)

一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎&#xff0c;可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML&#xff0c;XHTML和SVG文档的C 类和QML类型&#xff…

LeetCode:376.摆动序列

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;算法_仍有未知等待探索的博客-CSDN博客 题目链接&#xff1a;376. 摆动序列 - 力扣&#xff08;LeetCode&#xff09; 一、题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称…

146基于matlab的齿轮非线性动力学

基于matlab的齿轮非线性动力学&#xff0c;绘出系统状态变量随参数变化分岔图&#xff0c;绘图参数对应的系统各周期及混沌状态的时间历程图、相轨迹图、Poincare映射图&#xff0c;程序已调通&#xff0c;可直接运行。 146 matlab 齿轮非线性动力学 相图 (xiaohongshu.com)

力扣516. 最长回文子序列

动态规划 思路&#xff1a; 字符串最长回文子序列问题可以转换为原字符串 s 和逆串 s 的最长公共子序列长度问题&#xff0c;具体推断过程可以参考 力扣1312. 让字符串成为回文串的最少插入次数问题变成了求两个字符串最长公共子序列长度问题&#xff0c;具体思路可以参考 力扣…

Win32 PE图标资源提取(ICO图标提取)

最近需要写一个提取EXE或者DLL图标资源的功能, 网上找了很久, 要么功能不好用, 最后结果如下: 1.很多是加载为HICON句柄后转换为图片保存, 全损画质..., 2.后来找了个还能用的, 详见 https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/IconExtractor.cpp …

前端——HTML

目录 文章目录 前言 一.HTML的基本标签 二.HTML标签 1.块级标签 1.1块级标签特征 1.2标题标签 ​编辑 1.3 水平线标签 1.4 段落标签 1.5 无序列表标签 1.6 有序列表标签 1.7 表格标签 1.8层标签 1.9 表单 2. 行级标签 2.1行级标签特征 2.2图像标签 2.3 范围…

Leetcode刷题笔记题解(C++):1971. 寻找图中是否存在路径

思路&#xff1a; 1.建立图集&#xff0c;二维数组&#xff0c;path[0]里面存放的就是与0相连的节点集合 2.用布尔数组来记录当前节点是否被访问过&#xff0c;深度优先会使用到 3.遍历从起点开始能直接到达的点&#xff08;即与起点相邻的点&#xff09;&#xff0c;判断那…

Centos9使用chrony服务同步时间

安装chrony命令 Centos9里是预安装的&#xff0c;没有安装的话执行以下命令&#xff1a; yum install -y chronyCentos9 时间同步要使用chrony命令&#xff0c;ntp命令没有了 查看状态 #启用chronyd服务 systemctl enable chronyd#重启chronyd服务 systemctl restart chron…

操作系统(5)-----操作系统进程相关

目录 一.进程的组成 1.PCB&#xff08;进程控制块&#xff09; 2.程序段与数据段 二.进程的特征 三.进程的状态以及状态的转换 四.进程的组织 1.链接方式 2.索引方式 五.进程控制 六.进程控制相关原语 1.创建原语 2.撤销原语 3.阻塞原语 4.唤醒原语 5.切换原语 …

Elasticsearch8.11集群部署

集群就是多个node统一对外提供服务&#xff0c;避免单机故障带来的服务中断&#xff0c;保证了服务的高可用&#xff0c;也因为多台节点协同运作&#xff0c;提高了集群服务的计算能力和吞吐量。ES是一个去中心化的集群&#xff0c;操作一个节点和操作一个集群是一样的&#xf…

【Linux】-同步互斥的另一种办法-信号量

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

JVM系列——基础知识

Java运行区域 程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1]&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一…