思路:
定义变量ans记录结果
二维数组v记录被访问的位置,
逐个遍历数组,当有未被访问或者字符为 1 时,进入BFS递归
递归条件很简单,控制好边界,并且对应位置字符为 1 且未被访问即可。
从上下左右四个位置递归。
最后每递归结束一次,结果ans+1。返回结果
int ans = 0;
public int numIslands(char[][] grid) {
if(grid.length == 0 || grid[0].length == 0)return 0;
int row = grid.length;
int col = grid[0].length;
boolean[][] v = new boolean[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if(!v[i][j] && grid[i][j]=='1'){
dfs(row,col,i,j,grid,v);
ans++;
}
}
}
return ans;
}
private void dfs(int row,int col,int i, int j, char[][] grid, boolean[][] v) {
if(i<row && i>=0 && j<col && j>=0 && grid[i][j]=='1' && !v[i][j]){
v[i][j] = true;
dfs(row,col,i+1,j,grid,v);
dfs(row,col,i,j+1,grid,v);
dfs(row,col,i-1,j,grid,v);
dfs(row,col,i,j-1,grid,v);
}
}