今天看到今日头条的面试题中有一道求海岛个数的问题,想起之前学习算法时学习到并查集结构遇到类似的题目,但是一下想不起来怎么解决了。。。所以看了网友的分析马上就有了思路,不到两分钟就撸出来了。
题目描述:
给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
这题的思路是先遍历数组中每个元素,当遇到1时将海岛数量++,并且遍历1周围的位置,如果也有1就将1变为2。这样在遍历数组中每个元素时就可以知道哪些是岛屿了。
上代码:
class Solution {
public int numIslands(char[][] grid) {
if(grid == null || grid[0] == null)
return 0;
int res = 0;
for( int i=0 ; i < grid.length ; i++)