题目:
给你一个由
'1'
(陆地)和'0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
思路:
可以使用深度优先搜索
遍历整个二维数组,如果当前数为1,则进入感染函数并将岛的个数+1
感染函数:是一个递归标注的过程,会将所有相连的1都感染成2(这样就避免了遍历过程重复计数的情况)一个岛所有的1变成了2后,遍历就不会重复遍历了
代码:
class Solution {
public int numIslands(char[][] grid) {
int num =0;
for(int i=0;i< grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]=='1'){
interfence(grid,i,j);
num++;
}
}
}
return num;
}
//感染函数
public void interfence(char[][] grid,int i,int j){
if(i<0 |i>=grid.length||j<0||j>=grid[0].length||grid[i][j]!='1'){
return;
}
//进行感染
grid[i][j]='2';
interfence(grid,i+1,j);
interfence(grid,i-1,j);
interfence(grid,i,j+1);
interfence(grid,i,j-1);
}
}