给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
解题思路:从起始位置 0,0 开始搜索,找到第一个 ‘1’ 时修改其位置元素值作为访问标记,然后搜索上下左右所有相邻位置的值为1的元素,如果有相邻元素为‘1’,那么就在以这个元素为中心搜索与之相邻的1,直至所有与之相邻的‘1’都被访问过为止。这样就已经将第一个岛屿的所有值均修改为2,此时在搜索下一个为‘1’的元素,它就是下一个岛屿。
class Solution {
public int numIslands(char[][] grid) {
if(grid.length == 0) {
return 0;
}
int n = grid.length;
int m = grid[0].length;
int count = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j = 0 && grid[n-1][m] == '1') {
this.dfs(grid, n - 1, m);
}
// 下
if(n + 1 = 0 && grid[n][m-1] == '1') {
this.dfs(grid, n, m - 1);
}
// 右
if(m + 1 < grid[0].length && grid[n][m+1] == '1') {
this.dfs(grid, n, m+1);
}
}
}
作者:yongqi_wang