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

难度:medium

题目:
给定一个由1和0组成的二维表格,1表示陆地 0表示水域,统计陆地数。一块陆地是由水域包围且由水平和垂直陆地连结而成。你可以假定表格的四边都由水域包围。

思路:
递归遍历,将遍历过的位置标记出来。

Runtime: 3 ms, faster than 100.00% of Java online submissions for Number of Islands.

class Solution {
    public int numIslands(char[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                if ('1' == grid[i][j]) {
                    colorGrid(grid, i, j);
                    count++;
                }
            }
        }
        
        return count;
    }
    
    private void colorGrid(char[][] grid, int i, int j) {
        if (i < 0 || i >= grid.length 
            || j < 0 || j >= grid[i].length 
            || '0' == grid[i][j] || 'X' == grid[i][j]) {
            return;
        }
        
        grid[i][j] = 'X';
        colorGrid(grid, i + 1, j);
        colorGrid(grid, i - 1, j);
        colorGrid(grid, i, j + 1);
        colorGrid(grid, i, j - 1);
    }
}

linm
1 声望4 粉丝

〜〜〜学习始于模仿,成长得于总结〜〜〜