2

Q: Number of Islands

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output: 1

Example 2:

Input:
11000
11000
00100
00011

Output: 3

解题思路

标零法

对这个矩阵进行循环访问每一个点;
当这个点等于 1,岛屿数量 count++,与其同时用 dfs 算法(depth first search)访问周围的其他点,进行同样的操作;
且将访问过且等于 1 的点标记为零。

Solutions (JavaScript 版本)

/**
 * @param {character[][]} grid
 * @return {number}
 */
var numIslands = function(grid) {
    var count = 0    // 岛屿数量
    if (grid.length === 0) return count
    for (var i = 0; i < grid.length; i++) {
        for(var j = 0; j < grid[0].length; j++) {
            if (grid[i][j] === '1') {
                dfsSearch(grid, i, j)
                count++
            }
        }
    }
    return count
};

function dfsSearch(grid, i, j) {
    if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) return;
    if(grid[i][j] === '1'){
        grid[i][j] = '0';
        dfsSearch(grid, i + 1, j);    // 搜索右边
        dfsSearch(grid, i - 1, j);    // 搜索左边
        dfsSearch(grid, i, j + 1);    // 搜索下边
        dfsSearch(grid, i, j - 1);    // 搜索上边
    }
}

luckystar12
15 声望0 粉丝

越努力越幸运