class Solution {
private int m;
private int n;
public int numIslands(char[][] grid) {
int res = 0;
m = grid.length;
if(m == 0)
return 0;
n = grid[0].length;
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
if(grid[i][j] == '1'){//找到 i,j 为1的时候就算一个岛
dfs(grid,i,j);//进行一个深度优先遍历,最后会把属于这个点的一个“岛”遍历完毕
res++;//深度遍历一个岛,result就+1,所有的位置都变成0时,result也就有了最后的结果
}
}//两个 for 循环用来遍历已有的矩阵
}
return res;
}
private void dfs(char[][] grid,int i,int j){
if(i<0||j<0||i>=m||j>=n||grid[i][j] == '0')
return;//如果是上边和左边就超越了边界条件,直接 return
grid[i][j] ='0';//找过的地方变成 0
dfs(grid,i,j+1);
dfs(grid,i,j-1);
dfs(grid,i+1,j);
dfs(grid,i-1,j);//上下左右四个方向的遍历
}//找过的地方都会变成 0,证明几个1是连在一起的,是一个“岛”
}
网友评论