47.Number of Islands(岛的数量)

Level:

  Medium

题目描述:

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,四周都是0,那么为一个岛,只要水平或者垂直临近的1都算是1个岛,求一个二维数组中岛的个数。即求数组中不相邻的1的个数,解决思路,遍历数组,碰到一个1,就把周围所有相连的1都标记为非1,这样整个遍历过程中碰到的1的个数就是所求的解。

代码:

public class Solution{
    public int numIslands(char [][]grid){
        if(grid==null||grid.length==0)
            return 0;
        int res=0;
        for(int i=0;i<grid.length;i++){
            for(int j=0;j<grid[0].length;j++){
                if(grid[i][j]!='1')
                    continue;
                res++;
                dfs(grid,i,j);
            }
        }
        return res;
    }
    public void dfs(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';
            dfs(grid,i+1,j);
            dfs(grid,i,j+1);
            dfs(grid,i-1,j);
            dfs(grid,i,j-1);
        }
    }
}
原文地址:https://www.cnblogs.com/yjxyy/p/11083762.html