题目要求:
分析:
这是一道很典型的深度优先遍历算法题,利用递归来做。
对该二维数组进行逐行逐列进行遍历,遇到1的为岛屿,用计数器count来计数,并调用dfs递归。
在该dfs递归中,我们要注意将访问过的点都标记为0,不然count会把访问过的点也给算到岛屿数量里面去。
还要注意的是边界条件不能遗忘。
具体代码如下:
class Solution {
public int numIslands(char[][] grid) {
int count = 0;
if(grid == null || grid.length == 0)
return 0;
for(int i = 0; i < grid.length; i ++) {
for(int j = 0; j < grid[0].length; j ++) {
if(grid[i][j] == '1') {
dfs(grid, i, j);
count ++;
}
}
}
return count;
}
public void dfs(char[][] grid, int i, int j) {
if( i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0')
return;
//将这个grid[i][j]置为0,表示已经访问过
grid[i][j] = '0';
dfs(grid, i + 1, j);
dfs(grid, i, j + 1);
dfs(grid, i - 1, j);
dfs(grid, i, j - 1);
}
}