今天随机一题岛屿的最大面积,该题也是之前做过的题,其实岛屿问题属于一个系列的问题,顺便都温习一下
695.岛屿的最大面积
463.岛屿的周长
200.岛屿的数量
这些题,思路相近,只是处理上有点细微的差别,都是网格结构,使用dfs
上面提到的面积、数量、周长,其实都是岛屿问题的变种
掌握下面这个通用结构,就可以完美解决上述问题
void dfs(int[][] grid, int r, int c) {
// 判断 base case
if (!inArea(grid, r, c)) {
return;
}
// 如果这个格子不是岛屿,直接返回
if (grid[r][c] != 1) {
return;
}
grid[r][c] = 2; // 将格子标记为,进行剪枝
// 访问上、下、左、右四个相邻结点
dfs(grid, r - 1, c);
dfs(grid, r + 1, c);
dfs(grid, r, c - 1);
dfs(grid, r, c + 1);
}
// 判断坐标 (r, c) 是否在网格中
boolean inArea(int[][] grid, int r, int c) {
return 0 <= r && r < grid.length
&& 0 <= c && c < grid[0].length;
}