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

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—200. 岛屿数量相关的知识,希望对你有一定的参考价值。

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 );

以上是关于LeetCode Java刷题笔记—200. 岛屿数量的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--200岛屿数量

LeetCode刷题模版:187-189198-200

LeetCode刷题模版:187-189198-200

LeetCode刷题模版:187-189198-200

精选力扣500题 第41题 LeetCode 200. 岛屿数量c++/java详细题解

[JavaScript 刷题] 矩阵 - 岛屿的周长, leetcode 463