深度优先遍历
算法思路
- 别想太多,只要是
1就认为是岛屿,num_isLands++ - 从
grid[i][j] == 1开始dfs,把这个岛变成海,完了
public int numIslands(char[][] grid) {
int num_isLands = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == '1') {
num_isLands++;
dfs(grid, i, j);
}
}
}
return num_isLands;
}
private void dfs(char[][] grid, int _row, int _column) {
if (_row < 0 || _row >= grid.length
|| _column < 0 || _column >= grid[0].length
|| grid[_row][_column] == '0') {
return;
}
grid[_row][_column] = '0';
dfs(grid, _row, _column + 1);
dfs(grid, _row + 1, _column);
dfs(grid, _row, _column - 1);
dfs(grid, _row - 1, _column);
}