题目大意
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
解题思路
利用深度搜索(DFS)来解决,注意计数时的条件。
代码实现
class Solution {
private int[][] direction={{-1,0},{0,1},{1,0},{0,-1}};
int m,n;
public int numIslands(char[][] grid) {
if(grid==null||grid.length==0||grid[0].length==0){
return 0;
}
int ans=0;
m=grid.length;
n=grid[0].length;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]=='1'){
dfs(grid,i,j);
ans++;
}
}
}
return ans;
}
public void dfs(char[][] grid,int x,int y){
if(x<0||x>=m||y<0||y>=n||grid[x][y]=='0'){
return ;
}
grid[x][y]='0';
for(int[] d:direction){
int cur_x=x+d[0];
int cur_y=y+d[1];
dfs(grid,cur_x,cur_y);
}
return ;
}
}