题解 | 岛屿数量

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

import java.util.*;


public class Solution {
    /**
     *
     */

    public int solve (char[][] grid) {
        // 边界条件判断
        if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
        
        int islandCount = 0;
        int row = grid.length;
        int col = grid[0].length;

        // 1. 双重循环“巡逻”整个网格
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                // 2. 只有发现没被遍历过的陆地 '1' 时,才算发现一个新岛屿
                if (grid[i][j] == '1') {
                    islandCount++;
                    // 3. 召唤 DFS 把这个岛屿连通的所有陆地全部感染成 '0'
                    infect(grid, i, j);
                }
            }
        }
        
        return islandCount;
    }

    public void infect(char[][] grid, int x, int y) {
        // 边界处理:越界了,或者遇到了海洋 '0',直接返回
        if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0'){
            return;
        }

        // 将当前陆地变为海洋,防止死循环和重复计算(替代了 used 数组)
        grid[x][y] = '0';

        infect(grid, x - 1, y);  // 上
        infect(grid, x + 1, y);  // 下
        infect(grid, x, y - 1);  // 左
        infect(grid, x, y + 1);  // 右
    }
}

全部评论

相关推荐

HoePointer:把重点可以标黑,简历精简一下,然后把你的项目放在 github 或者 gitee 上面,readme 写好看一点(一般面试官有可能会翻你的网页)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务