力扣热门100题之岛屿的数量(DFS/BFS经典题)

核心思路:

遍历每一个格子,遇到陆地就把它所在的整座岛全部淹掉(标记为 0),岛屿数量 +1

通俗解释

  1. 逐个格子扫一遍
  2. 碰到 1 说明发现一座新岛count++
  3. 立刻用 DFS 把这座岛所有相连的 1 都改成 0(相当于淹掉)
  4. 继续扫,直到结束

这样每座岛只会被计数一次

完整代码实现:

java 复制代码
class Solution {
    public int numIslands(char[][] grid) {
        if(grid == null || grid.length == 0) return 0;

        int count = 0;
        int m = grid.length;
        int n = grid[0].length;

        for(int i = 0;i<m;i++){
            for(int j = 0;j<n;j++){
                // 找到一块陆地
                if(grid[i][j] == '1'){
                    count++;
                    // 把这座岛全部淹掉
                    dfs(grid,i,j);
                }
            }
        }
        return count;
    }

    public void dfs(char[][] grid,int i,int j){
        int m = grid.length;
        int n = grid[0].length;

        // 越界 或者 是水,直接返回
        if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {
            return;
        }

        // 淹掉
        grid[i][j] = '0';

        dfs(grid,i - 1,j);
        dfs(grid,i + 1,j);
        dfs(grid,i,j - 1);
        dfs(grid,i,j + 1);
    }
}
相关推荐
水木流年追梦1 天前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
始三角龙2 天前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
战南诚2 天前
力扣 之 198.打家劫舍
python·算法·leetcode
_日拱一卒2 天前
LeetCode:105从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
ʚ希希ɞ ྀ2 天前
dp反思与总结
算法·leetcode·动态规划
菜菜的顾清寒2 天前
力扣Hot100(23)反转链表
算法·leetcode·链表
m0_629494732 天前
LeetCode 热题 100-----27. 合并两个有序链表
数据结构·算法·leetcode·链表
水木流年追梦2 天前
大模型入门-RL基础
开发语言·python·算法·leetcode·正则表达式
开开心心_Every2 天前
支持自定义名单的实用随机抽签工具
运维·服务器·pdf·电脑·excel·启发式算法·宽度优先
人道领域2 天前
【LeetCode刷题日记】617.合并二叉树(空间换安全,还是原地省内存)
java·数据结构·算法·leetcode