🌕 200. 岛屿数量

吞佛童子2022年10月10日
  • algorithm
  • backtrace
小于 1 分钟

🌕 200. 岛屿数量

难度: 🌕

问题描述

img_1.png


解法

class Solution {
    public int numIslands(char[][] grid) {
        // 思路:
        // 回溯
        // 遍历数组,找到 陆地,就染色,顺便 岛屿数 ++
        int row = grid.length;
        int col = grid[0].length;
        int res = 0;
        for(int i = 0; i < row; i ++) {
            for(int j = 0; j < col; j ++) {
                if(grid[i][j] == '1') {
                    // 遇到还没有被发现的陆地
                    res ++;
                    mySol(grid, row, col, i, j);
                } 
            }
        }
        return res;
    }

    private void mySol(char[][] grid, int row, int col, int i, int j) {
        // 递归终止条件
        if(i < 0 || j < 0 || i >= row || j >= col) {
            return;
        }
        if(grid[i][j] != '1') {
            return; // 只有遇到相邻的陆地才有效,否则及时终止染色
        }
        // i < row && j < col
        grid[i][j] = '2';
        mySol(grid, row, col, i + 1, j);
        mySol(grid, row, col, i, j + 1); // 向四个方向染色,避免出现类似 工 形岛屿
        mySol(grid, row, col, i, j - 1);
        mySol(grid, row, col, i - 1, j);
    }
}

输出

img.png

上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou