Number of Islands

题目地址:
https://leetcode.com/problems/number-of-islands/#/description

题目:
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:
11110
11010
11000
00000
Answer: 1
Example 2:
11000
11000
00100
00011
Answer: 3

解题思路:
这道题主要就是用dfs,如果遇到'1', 那么就将其设为'0', 然后向四个方向做dfs。

代码:



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

Follow up:
count islands的变种,需要找湖中心的岛的个数(不和boundary接壤)。

解题思路:这里可以先将boundary进行一个dfs,然后再按照之前的解法来做一遍。








Comments

Popular Posts