200. 岛屿数量

89 阅读1分钟

image.png

image.png

/**
 * @param {character[][]} grid
 * @return {number}
 */
var numIslands = function (grid) {
    // 计数
    let count = 0

    // 深度优先
    dfs = (row, col) => {

        // 超出变成 或者 起始点为 0
        if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] === '0') {
            // 直接跳出
            return
        }

        // 将 1 沉没为 0 
        grid[row][col] = '0'

        // 扩张一下
        dfs(row, col - 1)
        dfs(row, col + 1)
        dfs(row - 1, col)
        dfs(row + 1, col)
    }

    // 遍历数组
    for (let row = 0; row < grid.length; row++) {
        for (let col = 0; col < grid[0].length; col++) {
            
            // 如果有一个 1 就是一个岛屿
            if (grid[row][col] === '1') {
                
                // 计数
                count++

                // 沉没一下
                dfs(row, col)
            }
        }
    }

    return count
}

200. 岛屿数量 题解 - 力扣(LeetCode)