力扣题/图论/岛屿数量

岛屿数量

力扣原题

给你一个由 '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

javascript 复制代码
/**
     * @param {character[][]} grid
     * @return {number}
     */
var numIslands = function (grid) {
    const m = grid.length
    const n = grid[0].length
    let landCount = 0;

    function expandLand(row, col) {
        const isLand = grid[row][col]
        if (isLand !== '1') return
        grid[row][col] = '-1' // 访问过的土地,不可再访问
        if (row > 0) {
            // 上
            expandLand(row - 1, col)
        }
        if (row < m - 1) {
            // 下
            expandLand(row + 1, col)
        }
        if (col > 0) {
            // 左
            expandLand(row, col - 1)
        }
        if (col < n - 1) {
            // 右
            expandLand(row, col + 1)
        }
    }

    for (let r = 0; r < m; r++) {
        for (let c = 0; c < n; c++) {
            // 如果当前位置是陆地,则为新陆地
            const isLand = grid[r][c]
            // 访问周边陆地
            if (isLand === '1') {
                landCount += 1
                expandLand(r, c) // 扩张联通的陆地,全部置为已访问
            }
        }
    }

    return landCount
};

解题思路

遍历所有位置,首次遇到值为'1'陆地 时,此时岛屿数量+1,然后从上下左右四个方向寻找相连通的陆地,并标识为'-1'已访问状态,再寻找下一个陆地就不会重复了

相关推荐
vivo互联网技术17 小时前
MagicBokeh:单步统一生成式框架实现真实感长焦虚化渲染 | CVPR 2026 Oral
人工智能·算法
樊小肆17 小时前
# 你还在等DeepSeek官方 agent Harness‌? 来试试 DeepSeeker-Code吧
前端·人工智能·后端
樊小肆17 小时前
2568 万 token 才花 2 块 2:聊聊 DeepSeeker-Code 怎么吃满上下文缓存
前端·人工智能·后端
JarvanMo17 小时前
Flutter 3.47: material/cupertino终于解耦了
前端
lucas_AI17 小时前
Grok 4.6:追平 GPT-5.6 Sol 的半价旗舰,但别只看跑分
人工智能·算法
郭邯17 小时前
一次「字符洁癖」引发的思考:我用 AI 写了个全角半角转换工具
前端
想要成为糕糕手17 小时前
🚀 在浏览器里跑 DeepSeek-R1?WebGPU 端侧推理实战(五)—— 中断、重置、缓存与流式生成
前端·react.js·llm
zephyr0517 小时前
链表实现O(n log n)时间复杂度的排序——归并排序详解
java·数据结构·算法
GuWenyue17 小时前
后端接口又双叒没写好?3 步搭建前端 Mock,从此告别"傻等后端"
前端·mocha
海兰17 小时前
【数据采集】开源的 Web 数据采集与处理Firecrawl(一)
前端·开源