🌕 200. 岛屿数量
2022年10月10日
- algorithm
🌕 200. 岛屿数量
难度: 🌕
问题描述
解法
class Solution {
public int numIslands(char[][] grid) {
// 思路:
// 回溯
// 遍历数组,找到 陆地,就染色,顺便 岛屿数 ++
int row = grid.length;
int col = grid[0].length;
int res = 0;
for(int i = 0; i < row; i ++) {
for(int j = 0; j < col; j ++) {
if(grid[i][j] == '1') {
// 遇到还没有被发现的陆地
res ++;
mySol(grid, row, col, i, j);
}
}
}
return res;
}
private void mySol(char[][] grid, int row, int col, int i, int j) {
// 递归终止条件
if(i < 0 || j < 0 || i >= row || j >= col) {
return;
}
if(grid[i][j] != '1') {
return; // 只有遇到相邻的陆地才有效,否则及时终止染色
}
// i < row && j < col
grid[i][j] = '2';
mySol(grid, row, col, i + 1, j);
mySol(grid, row, col, i, j + 1); // 向四个方向染色,避免出现类似 工 形岛屿
mySol(grid, row, col, i, j - 1);
mySol(grid, row, col, i - 1, j);
}
}