力扣热门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);
    }
}
相关推荐
Pniubi2 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
Pniubi3 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
文丑颜不良啊8 小时前
LeetCode2081~2100题目解析
java·leetcode
文丑颜不良啊9 小时前
LeetCode2061~2080题目解析
java·leetcode
文丑颜不良啊21 小时前
LeetCode1941~1960题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode1961~1980题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode2001~2020题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode2021~2040题目解析
java·leetcode
Nuanyt2 天前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表