LeetCode Java刷题笔记—200. 岛屿数量

16 篇文章 0 订阅
这篇博客介绍了一种中等难度的算法问题,即在由'1'(陆地)和'0'(水)组成的二维网格中计算岛屿数量。解决方案是通过深度优先搜索(DFS)遍历网格,当遇到'1'时标记为'2'以避免重复计数,最终统计岛屿数量。代码实现包括`numIslands`函数和辅助的`mark`函数,有效地搜索并标记岛屿。
摘要由CSDN通过智能技术生成

200. 岛屿数量

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

中等难度。使用图的DFS深度优先遍历即可解决。对于找到的某个值为‘1’的点位,记为1个岛屿,然后从当前位置开始,向四周扩散的继续查找该岛屿的范围,同时需要把找到‘1’的位置标记为‘2’,防止重复遍历。

实际上只要有了思路,那么代码很容易看懂!

public int numIslands( char[][] grid ){
   //岛屿计数器
   int islandNum = 0;
   for( int i = 0; i < grid.length; i++ ){
      for( int j = 0; j < grid[ i ].length; j++ ){
         if( grid[ i ][ j ] == '1' ){
            //从当前点开始向四周扩散查找‘1’,并且标记为‘2’
            //也就是标记当前岛屿的范围
            mark( grid, i, j );
            //当前岛屿的范围查找和标记完毕,岛屿数量加一
            islandNum++;
         }
      }
   }
   return islandNum;
}

private void mark( char[][] grid, int i, int j ){
   //如果二位数组查找i、j越界,或者当前值不等于‘1’,说明当前点位属于当前岛屿的边界部分,直接返回
   if( i < 0 || i > grid.length - 1 || j < 0 || j > grid[ 0 ].length - 1 || grid[ i ][ j ] != '1' ){
      return;
   }
   //如果当前值是‘1’,那么标记当前位置
   grid[ i ][ j ] = '2';
   //从当前位置,向四周(上下左右)扩散查找
   mark( grid, i - 1, j );
   mark( grid, i + 1, j );
   mark( grid, i, j - 1 );
   mark( grid, i, j + 1 );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值