算法-岛屿数量

1、题目来源

200. 岛屿数量 - 力扣(LeetCode)

2、题目描述

给你一个由 '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 == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0''1'

3、题解分享

java 复制代码
class Solution {
    public int numIslands(char[][] grid) {
        // 思路:深度遍历 + 修改遍历过的位置
        int n = grid.length;
        int m = grid[0].length;
        int ans = 0;
        for(int i=0;i<n;++i){
            for(int j = 0;j<m;++j){
                if(grid[i][j] == '1'){//每遇到一块岛屿
                    ++ans;
                    dfs(grid,n,m,i,j);
                }
            }
        }
        return ans;
    }
    public void dfs(char[][] grid,int n,int m,int row,int col){
        if(row <0 || row >= n || col < 0 || col >=m){
            return;
        }
        if(grid[row][col] == '0'){
            return;
        }

        grid[row][col] = '0';

        dfs(grid,n,m,row-1,col);
        dfs(grid,n,m,row+1,col);
        dfs(grid,n,m,row,col-1);
        dfs(grid,n,m,row,col+1);
    }
}
相关推荐
致Great12 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起12 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
测试_AI_一辰13 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
lucas_AI13 小时前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
LuminousCPP13 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil20813 小时前
leetcode 三数之和
数据结构·算法·leetcode
小小龙学IT14 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
noipp14 小时前
推荐题目:洛谷 P16689 出征
java·开发语言·数据结构·c++·算法·洛谷·luogu
eBest数字化转型方案14 小时前
从工程视角拆解冰柜资产管理:拍照识别 pipeline、纯净度算法与 IoT 选型踩坑
人工智能·物联网·算法
Interview Aid11214 小时前
Roblox OA 面经|小游戏+编程双修,Coding 两题满分通过
算法