hot 100 200. 岛屿数量

岛屿数量


问题描述

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

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

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


样例输入

cpp 复制代码
grid = [
  ['1','1','1','1','0'],
  ['1','1','0','1','0'],
  ['1','1','0','0','0'],
  ['0','0','0','0','0']

样例输出

cpp 复制代码
1

评测用例规模与约定

m == grid.length

n == gridi.length

1 <= m, n <= 300

gridij 的值为 '0' 或 '1'


解析

利用递归的思想解决问题,要知道岛屿数量,我们遍历每一个节点从它出发左右上下走经过的就变为0,这样完了之后就是一个岛屿数量加1,以此类推。


参考程序

cpp 复制代码
class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int n =grid.size(),m=grid[0].size();
        int ans=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(grid[i][j]=='1'){
                    dfs(i,j,grid);
                    ans++;
                }
            }
        }
        return ans;
    }
    void dfs(int i,int j,vector<vector<char>>& grid){
        if(i<0||i>=grid.size()||j<0||j>=grid[0].size()||grid[i][j]!='1')return;
        grid[i][j]='2';
        dfs(i,j-1,grid);
        dfs(i,j+1,grid);
        dfs(i+1,j,grid);
        dfs(i-1,j,grid);
    }
};

难度等级

⭐️⭐️⭐️(1~10星)

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
可编程芯片开发20 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考21 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan1 天前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
wabs6661 天前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
先吃饱再说1 天前
LeetCode 101. 对称二叉树
算法
是Dream呀1 天前
人眼看不出的伪造,AI如何识别?实测合合信息跨模态鉴伪与去反光技术
算法
QN1幻化引擎1 天前
SFA 信号场注意力:用8KB参数换248x KV Cache压缩,边缘设备也能跑长序列
人工智能·算法·gitee·gitlab
段一凡-华北理工大学1 天前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁
cjr_xyi1 天前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
atunet1 天前
从算法优化到系统加速的多层级思考7
算法