岛屿的数量

题目描述

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

在这里插入图片描述

思路

从 (i, j) 向此点的上下左右 (i+1,j),(i-1,j),(i,j+1),(i,j-1) 做深度搜索,如果当前节点的坐标符合要求,并且当前节点的不是0,那么就把它置为0(置0是因为海洋是0,方便我们操作),继续从此点的上下左右做深度搜索,直到所有点都遍历完即可。

代码如下

class NumIslands {public int numIslands(char[][] grid) {int m = grid.length, n = grid[0].length, res = 0;for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(grid[i][j] == '1'){res++;dfs(grid, i, j);}}}return res;}public void dfs(char[][] grid, int i, int j){if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0') {// 终止条件return;}grid[i][j] = '0';dfs(grid, i - 1, j);dfs(grid, i + 1, j);dfs(grid, i, j - 1);dfs(grid, i, j + 1);}
}

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

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

相关文章

uniapp-vue3 抖音小程序开发(上线项目开源)

最近公司临时接一个项目来接手别人的流量&#xff0c;项目比较小&#xff0c;时间比较赶。 需求&#xff1a;一个答题小程序&#xff0c;通过答题来实现性格测算和分析。 之前开发过支付宝小程序和微信小程序&#xff0c;这次是首次开发抖音小程序&#xff0c;老板要求只能下…

第十三章:IO流

13.1&#xff1a;File类的使用 package com.jiayifeng.java;import org.junit.Test;import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.Date;/*** author 爱编程的小贾* create 2023-10-10 16:13** 一&#xff1a;File类的使用…

通过后台系统添加一段div,在div中写一个<style></style>标签来修改div外面的元素的深层元素的样式

先看图 btn元素就是通过后台系统加上的元素,现在需要通过在btn里面写一个style标签来修改grid-nine里面的head元素的高度.开始想通过style来修改,但是不知道怎么去获取这个div外面的元素,想通过js方法去修改,写了script标签加了js代码,但不生效,后面问了才知道,这个项目是vue打…

MES系统安灯管理:实时可视化生产线状态

一、MES系统安灯管理的意义&#xff1a; 安灯管理是指通过使用不同颜色的灯光信号来表示生产线的状态&#xff0c;以便生产人员能够直观地了解生产线的运行情况。MES系统安灯管理的意义在于提供一个实时可视化的工具&#xff0c;使制造企业能够及时发现生产线异常和潜在问题&a…

light client轻节点简介

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要&#xff0c;但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户&#xff0c;可选…

【安全】容器中二进制漏洞检测方案

1 背景 镜像或者容器中&#xff0c;如果用户是通过包管理软件安装的程序&#xff0c;可以通过包管理软件获取对应的软件信息和版本信息&#xff0c;但是&#xff0c;如果用户自己编译了一个二进制&#xff0c;然后打包到镜像或者通过拷贝命令放到容器中&#xff0c;该如何识别…

设计模式 - 结构型模式考点篇:适配器模式(类适配器、对象适配器、接口适配器)

目录 一、适配器模式 一句话概括结构式模式 1.1、适配器模式概述 1.2、案例 1.2.1、类适配器模式实现案例 1.2.2、对象适配器 1.2.3、接口适配器 1.3、优缺点&#xff08;对象适配器模式&#xff09; 1.4、应用场景 一、适配器模式 一句话概括结构式模式 教你将类和对…

阿里云上了新闻联播

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 阿里新任的CEO吴泳铭上央视新闻联播了! 在昨天的新闻联播里&#xff0c;出席科技座谈会&#xff0c;有一个特别镜头&#xff0c;出现了阿里新任CEO吴泳铭的镜头。 这个信号意义明显&#xff0c;我…

uniapp下拉刷新

为什么要使用uniapp的下拉刷新呢 跨平台兼容性&#xff1a; Uniapp 允许你一次编写代码&#xff0c;然后在多个平台&#xff08;如微信小程序、H5、iOS 和 Android 等&#xff09;上运行。使用 Uniapp 的下拉刷新功能&#xff0c;可以确保在不同平台上都能提供一致的用户体验&a…

程序员的注释:编程艺术与沟通工具

在软件开发的世界中&#xff0c;注释是一种常见的做法。然而&#xff0c;对于许多程序员来说&#xff0c;写注释可能会被视为一种不必要的繁琐工作&#xff0c;或者被认为是对代码的“耍流氓”。这种观点引发了一个有趣的问题&#xff1a;我们是否应该写注释&#xff1f;如果应…

kali linux安装redis

官网&#xff1a;Install Redis from Source | Redis wget https://download.redis.io/redis-stable.tar.gztar -xzvf redis-stable.tar.gz cd redis-stable make显示如下即可进入下一步 sudo make installredis-server 可以看到已经可以使用了。 但是由于第一次使用导致了re…

Rust专属开发工具——RustRover发布

JetBrains最近推出的Rust集成开发工具——RustRover已经发布&#xff0c;官方网站&#xff1a;RustRover: Rust IDE by JetBrains JetBrains出品过很受欢迎的开发工具IntelliJ IDEA、PyCharm等。 RustRover优势 Rust集成环境&#xff0c;根据向导可自动下载安装rust开发环境提…

Centos7中安装Jenkins教程

1.必须先配置jdk环境&#xff0c;安装jdk参考 Linux配置jdk 2.先卸载Jenkins # rpm卸载 rpm -e jenkins # 检查是否卸载成功 rpm -ql jenkins # 彻底删除残留文件 find / -iname jenkins | xargs -n 1000 rm -rf 3.安装Jenkins 在 /usr/ 目录下创建 jenkins文件夹 mkdir -p je…

Maven 构建Java项目

Maven 使用原型 archetype 插件创建项目。要创建一个简单的 Java 应用&#xff0c;我们将使用 maven-archetype-quickstart 插件。 在下面的例子中&#xff0c;我们将在 C:\MVN 文件夹下创建一个基于 maven 的 java 应用项目。 命令格式如下&#xff1a; mvn archetype:gene…

微信小程序--》从模块小程序项目案例23.10.09

配置导航栏 导航栏是小程序的门户&#xff0c;用户进来第一眼看到的便是导航栏&#xff0c;其起着对当前小程序主题的概括。而我们 新建的小程序 时&#xff0c;第一步变开始配置导航栏。如下&#xff1a; 配置tabBar 因为配置tabBar需要借助字体图标&#xff0c;我这里平常喜…

C++中的运算符重载

目录 1、运算符重载规则 2、运算符重载的两种形式 2.1、成员函数重载形式 2.2、普通的非成员函数重载形式 1、运算符重载规则 C中可以重定义或重载大部分 C 内置的运算符。这样&#xff0c;我们就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数&#xff0c…

【数据库——MySQL】(16)游标和触发器习题及讲解

目录 1. 题目1.1 游标1.2 触发器 2. 解答2.1 游标2.2 触发器 1. 题目 1.1 游标 创建存储过程&#xff0c;利用游标依次显示某部门的所有员工的实际收入。(分别用使用 计数器 来循环和使用 标志变量 来控制循环两种方法实现) 创建存储过程&#xff0c;将某部门的员工工资按工作…

前端js调试如何复制console.log打印的对象或数组

在使用console.log()打印我们的内容时&#xff0c;时常需要将打印的内容复制粘贴使用&#xff0c;然而控制台打印出来的对象是经过格式化处理且直接选择粘贴会有格式问题&#xff0c;此时我们可以通过控制台的 copy() 方法来进行打印结果的复制&#xff0c;如图所示&#xff1a…

使用python查找指定文件夹下所有xml文件中带有指定字符的xml文件

文件夹目录如下&#xff08;需要递归删除文件夹下的.DS_Store文件&#xff09;&#xff1a; labels文件夹下面是xml文件&#xff1a; import os import os.pathpath "name/labels" files os.listdir(path) # 得到文件夹下所有文件名称 s []for xmlFile in files:…

JAVA String 和 String[][]互转的两种方法

第一种方法&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.40</version> </dependency>字符串转数组&#xff1a; String s "[[22,23,23],[1,10,20]]"…