【图论】Leetcode 200. 岛屿数量【中等】

2024-04-09 1164阅读

温馨提示:这篇文章已超过385天没有更新,请注意相关的内容是否还可用!

岛屿数量

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

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

    【图论】Leetcode 200. 岛屿数量【中等】
    (图片来源网络,侵删)

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

    示例 1:

    输入:grid = [

    [“1”,“1”,“1”,“1”,“0”],

    [“1”,“1”,“0”,“1”,“0”],

    [“1”,“1”,“0”,“0”,“0”],

    [“0”,“0”,“0”,“0”,“0”]

    ]

    输出:1

    解题思路

    • 1、使用深度优先搜索DFS来遍历二维网格,找到所有岛屿。(PS: 深度优先搜索(DFS)一般是使用递归来实现)
    • 2、对于每个遍历到的陆地(‘1’),开始进行搜索,将其与相邻的陆地标记为已访问过,直到将整个岛屿搜索完成。
    • 3、统计搜索过程中遇到的岛屿数量。

      Java实现

      public class NumberOfIslands {
          public int numIslands(char[][] grid) {
              if (grid == null || grid.length == 0 || grid[0].length == 0) {
                  return 0;
              }
              int m = grid.length;
              int n = grid[0].length;
              int count = 0;
      //        {'1', '1', '0', '0', '0'},
      //        {'1', '1', '0', '0', '0'},
      //        {'0', '0', '1', '0', '0'},
      //        {'0', '0', '0', '1', '1'}
              for (int i = 0; i = m || j = n || grid[i][j] == '0') {
                  return;
              }
              grid[i][j] = '0'; //将当前单元格标记为已访问
              //继续搜索当前位置的上、下、左、右四个方向,探索相邻的单元格
              //直到没有相邻的岛屿(grid[i][j] == '0')
              dfs(grid, i + 1, j);
              dfs(grid, i - 1, j);
              dfs(grid, i, j + 1);
              dfs(grid, i, j - 1);
          }
          public static void main(String[] args) {
              NumberOfIslands islands = new NumberOfIslands();
              char[][] grid = {
                  {'1', '1', '0', '0', '0'},
                  {'1', '1', '0', '0', '0'},
                  {'0', '0', '1', '0', '0'},
                  {'0', '0', '0', '1', '1'}
              };
              System.out.println("Number of islands: " + islands.numIslands(grid));
          }
      }
      

      时间空间复杂度

      • 时间复杂度:O(m * n),其中 m 和 n 分别是二维网格的行数和列数,因为需要遍历整个二维网格。

      • 空间复杂度:O(m * n),深度优先搜索的递归调用可能达到 O(m * n) 的深度,其中 m 和 n 分别是二维网格的行数和列数。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]