思路:DFS。值为1的点是为岛屿,上下左右若有相邻为1的点,算同一个岛屿 。DFS遍历,遇到1就算一个岛屿,岛屿总数+1,然后将其变为0,再遍历其相邻的上下左右,若有值为1的点,将其变为0,岛屿总数不变。
代码:
class Solution {
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int count = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == '1') {
count++;
dfs(grid,i,j);
}
}
}
return count;
}
public void dfs (char[][] grid,int i, int j) {
if (i < 0 || i >= grid.length || j >= grid[0].length || j < 0 || grid[i][j] == '0') {
return ;
}
grid[i][j] = '0';
dfs (grid, i - 1, j);
dfs (grid, i + 1, j);
dfs (grid, i, j - 1);
dfs (grid, i, j + 1);
}
}