• 200-岛屿数量


    题目

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

    岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

    此外,你可以假设该网格的四条边均被水包围。

    示例 1:

    输入:
    [
    ['1','1','1','1','0'],
    ['1','1','0','1','0'],
    ['1','1','0','0','0'],
    ['0','0','0','0','0']
    ]
    输出: 1
    示例 2:

    输入:
    [
    ['1','1','0','0','0'],
    ['1','1','0','0','0'],
    ['0','0','1','0','0'],
    ['0','0','0','1','1']
    ]
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
    链接:https://leetcode-cn.com/problems/number-of-islands

    思路

    遇到一个1之后,就对1附近区域进行感染,感染几次就有几个岛屿。

    代码时间复杂度O(N*M)

    代码

    public int numIslands(char[][] grid) {
            if(grid.length == 0 || grid[0].length == 0){
                return 0;
            }
    
            int count = 0;
            int N = grid.length;
            int M = grid[0].length;
            for(int i = 0; i < N; i++) {
                for(int j = 0; j < M; j++) {
                    if(grid[i][j] == '1') {
                        count++;
                        infect(grid, i, j, N, M);
                    }
                    
                }
            }
            return count;
        }
    
        public void infect(char[][] grid, int i, int j, int N, int M) {
            //  grid[i][j] 放后面,否则越界
            if (i < 0 || j < 0 || i >= N || j >= M || grid[i][j] != '1') {
                return;
            }
    
            grid[i][j] = '2';
            infect(grid, i+1, j, N, M);
            infect(grid, i-1, j, N, M);
            infect(grid, i, j+1, N, M);
            infect(grid, i, j-1, N, M);
        }
    
  • 相关阅读:
    web项目中加斜杠与不加斜杠
    事务是什么,以及事务四个特性
    Java中 a+=b和a=a+b有什么区别?
    JAVA基础15
    JAVA基础13
    JAVA基础12
    JAVA基础11
    JAVA基础10
    DELPHI下的SOCK编程
    设置VSS2005使支持通过Internet访问(转)
  • 原文地址:https://www.cnblogs.com/boycelee/p/13715370.html
Copyright © 2020-2023  润新知