200. 岛屿数量(中等题)

  • 时间:
  • 来源:互联网

题目描述:
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000

输出: 1

示例 2:

输入:
11000
11000
00100
00011

输出: 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:

class Solution {
    public int numIslands(char[][] grid) {
        if(grid==null||grid.length == 0 || grid[0].length == 0){
            return 0;
        }
        int count = 0;
        int m = grid.length;
        int n = grid[0].length;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(grid[i][j] == '1'){
                    count++;
                    infect(i,j,grid,m,n);
                }
            }
        }
        return count;
    }

    private void infect(int i,int j,char[][] arr,int m ,int n) {
        if(i < 0||i>=m||j<0||j>=n||arr[i][j] !='1'){
            return;
        }
        arr[i][j] = '2';
        infect(i,j+1,arr,m,n);
        infect(i,j-1,arr,m,n);
        infect(i+1,j,arr,m,n);
        infect(i-1,j,arr,m,n);
    }
}
众人都是孤独的
发布了178 篇原创文章 · 获赞 5 · 访问量 2260
私信 关注

本文链接http://element-ui.cn/news/show-1742.aspx