leetcode 200. Number of Islands(岛的数量-连通区域数)

LeetCode算法题集-200. Number of Islands(岛的数量) 给定一个2维数字表格,其中'1'代表岛,'0'代表水,要求计算岛的数量。一个岛被水包围着,其上下左右的格子是1的话也算同一个岛。你可以假设表格的四个边外都是水。英语原文:200. Number of IslandsGiven a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island i... 阅读详情

Given a 2d grid map of '1’s (land) and '0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output: 1

把1看作小岛,0看作水,而且数组的外围默认是水。
上下左右算连通,斜方向不算。
问小岛有多少个

思路:

DFS
本质上是求1的连通区域,
因此每走到一个1处,搜索它上下左右是否为1,是1就算同一片区域,同时搜索完后将这个位置的1改为0,防止重复搜索。
如果不想修改原数组,可用和grid同样大小的boolean数组表示每个位置是否已经被访问过。

    public int numIslands(char[][] grid) {
        int num = 0;
        int rows = grid.length;
        int cols = grid[0].length;
        
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                num += grid[i][j] - '0';
                dfs(grid, i, j, rows, cols);
            }
        }
        //System.out.println(grid[0][0]);
        return num;
    }
    
    public void dfs(char[][] grid, int i, int j, int rows, int cols) {
        if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] == '0') {
            return;
        }
        
        grid[i][j] = '0';
        
        dfs(grid, i-1, j, rows, cols); //up
        dfs(grid, i+1, j, rows, cols); //down
        dfs(grid, i, j-1, rows, cols); //left
        dfs(grid, i, j+1, rows, cols); //right
    }

注释的地方为表示访问过的visited数组

class Solution {
    //boolean[][] visited;
    int m;
    int n;
    public int numIslands(char[][] grid) {
        int num = 0;
        m = grid.length;
        n = grid[0].length;
        //visited = new boolean[m][n];
        
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(grid[i][j] == '0') continue;
                dfs(grid, i, j);
                num ++;
            }
        }
        return num;
    }
    
    void dfs(char[][] grid, int i, int j) {
        if(i < 0 || i >=m || j < 0 || j >=n) return;
        if(grid[i][j] == '0') return;
        
        grid[i][j] = '0';
        //visited[i][j] = true;
        dfs(grid, i-1, j);
        dfs(grid, i, j-1);
        dfs(grid, i, j+1);
        dfs(grid, i+1, j);
    }
    
    
}
leetcode解题之200. Number of Islands Java版(岛屿的数量) leetcode解题之200. Number of Islands Java版(岛屿的数量) ,深度优先遍历 阅读详情

相关推荐

当预编译包失效时:手把手教你在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu

本文详细指导在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu的全流程,解决预编译包兼容性问题。涵盖环境准备、工具链配置、源码编译、常见问题解决及性能优化技巧,帮助开发者在边缘计算设备上实现高效AI模型推理。

weixin_29062823的博客 134

Leetcode Number of island I & II 解析 以及java实现

Leetcode Number of island I & II 解析 以及java实现 Number of island 是一道leetcode的经典BFS的题了,题目给一个二位的数组作为输入,1代表陆地,0代表海洋,如果陆地相连则是一个岛屿,让我们计算出当前数组内岛屿的数量。 思路: 大致思路就是我们先自己设定一个类用来存储坐标,在利用两个delta数组来存储位移的变量进行四方位移,然后利用BFS把岛屿进行合并,最后确定留下的岛屿都是不相连的就是我们最后得到的岛屿数量。 class Soluti

Dh0le的博客 330

win10安装openvpn客户端

进入C:\Program Files\TAP-Windows\bin目录,然后右键用管理员权限执行addtap.bat文件,此文件执行会创建一个网卡。链接:https://pan.baidu.com/s/1KAifTiP7qp1i5ZkfdnfwkA。4.2 进入安装目录的config下新建一个文件夹,将证书文件全部挪进去(不移动.ovpn文件)3.4 将拿到的ssl认证文件放入安装目录的config目录下。然后修改ovpn文件 “./”代表当前路径,第二个链接重复。3.1 一直下一步到这里打上勾。

qq_36200932的博客 3万+

【Leetcode】305. Number of Islands II

题目地址: https://leetcode.com/problems/number-of-islands-ii/ 给定一个二维零矩阵,再给点一个数组,数组每个位置是个长为222的整数数组,是矩阵里的一个坐标。遍历数组的同时,会把矩阵相应坐标位置上的000变为111。要求在线计算遍历数组的时候连通块(岛屿)的数量。 思路是并查集。在遍历数组的时候,取出坐标,如果矩阵在该位置已经有岛屿则略过(这里主...

数学、算法爱好者的博客 452

CST STUDIO SUITE 2023安装

破解工具的Crack文件夹内有一个名为「CST Studio Suite 2022」的文件夹,这也是于CST的安装目录同名的文件夹,直接把它拷贝到CST Studio Suite 2022的同级路径下即可,比如你的CST安装路径为:D:\Program Files\CST Studio Suite 2022,则将Crack目录内的「CST Studio Suite 2022」文件夹复制到 D:\Program Files\ 这个级别的路径下即可。软件百度网盘链接放在文章末尾啦!先不着急启动CST或者激活。

m0_49516223的博客 4116

【Unity3D】关于unity中spriteAtlas的打包方案及使用时内存状态的多组对照实验

unity项目中使用精灵(Sprite)为了降低性能消耗,我们可以使用精灵图集(Sprite Atlas)技术,它能够将多个纹理合并成一个大纹理

云渊寒烬 5100

Leetcode 305. Number of Islands II (python)

Leetcode 305. Number of Islands II题目:解法:hashmap 题目: 解法:hashmap 这道题是number of islands的follow up,关于number of islands见另外一篇博客。 这道题目的难点在于,

qq_37821701的博客 1211

OneNet平台MQTT连接避坑指南:C语言Token计算实战(附完整代码)

本文详细解析了OneNet平台MQTT连接中的Token计算机制,提供了C语言实现的完整代码和实战指南。通过HMAC算法和Base64编码,开发者可以高效生成安全凭证,避免常见连接问题,适用于物联网设备开发。

weixin_29193359的博客 459

【小白笔记】岛屿数量

return 0🪄这是防止空列表访问出错。口诀:“若无网格或无列,直接零岛不多费。return 0看起来简单,但其实是非常关键的一步,背后有两个目的,分别对应不同的异常情况。输入含义grid 是否为空grid[0] 是否为空返回[]完全空✅ True❌(访问会出错)0[[]]有一行但无列❌ False✅ True0正常网格❌ False❌ False继续执行所以这行是为了让函数健壮(robust),防止空输入报错,也符合逻辑“没有格子就没有岛屿”。return🪄。

weixin_70325224的博客 1000

【速通RAG实战:索引】4.RAG文档解析技术

通过本文技术方案,可构建高精准、高效率的文档解析流水线,为 RAG 应用提供坚实的知识底座。核心在于**格式解析的鲁棒性**和**语义分块的准确性**,后续通过持续的性能优化和质量监控,逐步提升索引质量和检索效率。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1544

Python实现多元线性回归(Multiple Linear Regression)

多元线性回归是一种用于建立多个自变量与因变量之间关系的统计学方法。在多元线性回归中,我们可以通过多个自变量来预测一个因变量的值。每个自变量对因变量的影响可以用回归系数来表示。

优快云 精品推荐 4326

算法:Number of Islands(岛屿的个数)

说明 算法:Number of Islands LeetCode地址:https://leetcode.com/problems/number-of-islands/ 题目: Given a 2d grid map of '1’s (land) and '0’s (water), count the number of islands. An island is surrounded by wat...

AI架构师易筋 2180

到底什么是指令集?什么是微架构?他们是什么关系?

指令集、处理器架构、芯片厂商、ARM、x86,其间关系还在迷糊吗?一文迅速理清!!

车载系统攻城狮 7811

LeetCode 200. Number of Islands 题解

本题是图论中连通分量计数的经典问题。遍历网格,找到未访问的陆地使用 DFS 或 BFS 标记整个岛屿统计岛屿数量。

cannonjinx的博客 1005

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[LeetCode]200. Number of Islands岛的数量

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assu

jhbxlx的专栏 936

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode 200. 岛屿数量(Number of Islands)

易错点正确做法说明未判断边界导致数组越界加上的判断忘记标记访问的'1'或用visited集对于不同岛屿没有累加count每次 DFS 前都count += 1本题是图遍历中经典的“连通块数量”问题。DFS 和 BFS 均可解决,推荐先掌握 DFS。与本题类似的还有:被围绕的区域(LeetCode 130)太平洋大西洋水流问题(LeetCode 417)

2501_91641025的博客 820

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Leetcode 200. Number of Islands

Leetcode 200. Number of Islands Given a 2d grid map of '1’s (land) and '0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontal...

qwfand的博客 168

Leetcode200. Number of Islands

一个二维数组,把 1 看做陆地,把 0 看做大海,陆地相连组成一个岛屿。把数组以外的区域也看做是大海,问总共有多少个岛屿。

magic_jiayu的博客 188

LeetCode 200. Number of Islands 岛屿的数量

1.题目 给定2d网格图(其中,1代表陆地 0代表水),计算岛屿数量。 岛被水包围,通过水平或垂直连接相邻的土地而形成。 您可以假设网格的所有四个边缘都被水包围。 示例: Input: 11000 11000 00100 00011 Output: 3 2.思路 DFS的思想。 遍历矩阵,每遇到’1’后, 开始向四个方向DFS,搜'1'到后该位置变为’0’,因为相邻的...

拾遗 1817

LeetCode 200:岛屿数量 Number of Islands

题目: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded...

爱写Bug 497

200. Number of Islands

本周学习了DFS,因此在LeetCode中挑选了一道关于DFS的题目作为巩固。 题目:200. Number of Islands Given a 2d grid map of'1's (land) and'0's (water), count the number of islands. An island is surrounded by water and is forme...

bangshu0671的博客 123

【LeetCode】200. Number of Islands 岛屿数量(Medium)(JAVA)

【LeetCode】200. Number of Islands 岛屿数量(Medium)(JAVA) 题目地址: https://leetcode.com/problems/number-of-islands/ 题目描述: Given an m x n 2d grid map of '1’s (land) and '0’s (water), return the number of islands. An island is surrounded by water and is formed by con

qq_16927853的博客 193

Leetcode 200 Number of Islands 岛的个数

给出一个2D的地图,由陆地(1)和水(0)组成,数出岛的个数.一个岛被水环绕并且与相邻的陆地连接.你可以假设方阵的四周被水环绕.

(ง •̀_•́)ง 2553

leetcode 200 : Number of Islands

leetcode 200 : Number of Islands java c++ python

西施豆腐渣 1万+
上一篇: matlab conv2的图像卷积与CNN中图像卷积的区别
下一篇: leetcode 130.Surrounded Regions(包围区域)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值