codeTop100题(14)200. 岛屿数量

107 阅读1分钟

1. 题目

200. 岛屿数量

2. 分析

  • 首先我们画一个海洋的图

image.png

  • 当我们发现grid[0][0]是一个陆地,我们计数,并把这个陆地构成的岛屿都标记上

image.png

  • 随后我们继续遍历grid数组,遇到海洋和已经被使用的陆地,我们跳过,最终到grid[3][2]找到第二个岛屿

image.png

3. 代码

public int numIslands(char[][] grid) {
    if (grid.length == 0 || grid[0].length == 0) {
        return 0;
    }
    int count = 0;
    int r = grid.length, c = grid[0].length;
    int[][] dp = new int[r][c];

    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            if (grid[i][j] == '0' || dp[i][j] == 1) {
                continue;
            }
            count++;
            deepSearch(grid, i, j, dp);
        }
    }
    return count;
}

public void deepSearch(char[][] grid, int i, int j, int[][] dp) {
    if (i < 0|| i > grid.length - 1) {
        return;
    }
    if (j < 0 || j > grid[0].length - 1) {
        return;
    }
    if (grid[i][j] == '0' || dp[i][j] == 1) {
        return;
    }
    dp[i][j] = 1;
    deepSearch(grid, i, j+1, dp);
    deepSearch(grid, i, j-1, dp);
    deepSearch(grid, i+1, j, dp);
    deepSearch(grid, i-1, j, dp);
}