【CSDN 每日一练 ★★☆】【DSF/BSF】岛屿数量

【CSDN 每日一练 ★★☆】【DSF/BSF】岛屿数量

深度遍历 宽度遍历

题目

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

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

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

示例

示例 1:

输入:grid = [

"1","1","1","1","0",

"1","1","0","1","0",

"1","1","0","0","0",

"0","0","0","0","0"

]

输出:1

示例 2:

输入:grid = [

"1","1","0","0","0",

"1","1","0","0","0",

"0","0","1","0","0",

"0","0","0","1","1"

]

输出:3

提示
  • m == grid.length
  • n == gridi.length
  • 1 <= m, n <= 300
  • gridij 的值为 '0' 或 '1'
Java实现
java 复制代码
public int numIslands(char[][] grid) {
    int islandNum = 0;
    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[0].length; j++) {
            if (grid[i][j] == '1') {
                infect(grid, i, j); //将与grid[i][j]相连的`1`标记为`2`
                islandNum++;
            }
        }
    }
    return islandNum;
}
public void infect(char[][] grid, int i, int j) {
    // 如果发现已经被标记或者是水,结束深度遍历
    if (i < 0 || i >= grid.length ||
            j < 0 || j >= grid[0].length || grid[i][j] != '1') {
        return;
    }
    grid[i][j] = '2';
    // 宽度遍历四周
    infect(grid, i + 1, j);
    infect(grid, i - 1, j);
    infect(grid, i, j + 1);
    infect(grid, i, j - 1);
}
相关推荐
INGNIGHT6 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080546 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山7 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
林语琛7 小时前
我写的 switch…break 被 Babel 偷偷吞了
前端·javascript·babel
liuchangng7 小时前
Jev 模型研究:从生成式大模型到决策式模型——System One、RLCD 校准与采用边界
java·javascript·人工智能·python·深度学习
a187927218317 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx8 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_307779138 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_966949658 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash
我命由我123459 小时前
CSS - CSS 媒体查询 orientation
前端·javascript·css·html·css3·html5·js