// 冲刺021
class Solution {
static int maxX;
static int maxY;
final int[][] direction = new int[][]{{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
public int numIslands(char[][] grid) {
maxX = grid[0].length;
maxY = grid.length;
int ans = 0;
boolean[][] mp = new boolean[maxY][maxX];
for (int i = 0; i < maxY; i++) {
for (int j = 0; j < maxX; j++) {
if (grid[i][j] == '0' || mp[i][j] == true) {
continue;
}
find(i, j, mp, grid);
ans++;
}
}
return ans;
}
void find(int i, int j, boolean[][] mp, char[][] grid) {
mp[i][j] = true;
for (int k = 0; k < 4; k++) {
int nowY = i + direction[k][0];
int nowX = j + direction[k][1];
if (nowX >= 0 && nowX < maxX && nowY >= 0 && nowY < maxY && grid[nowY][nowX] == '1' && mp[nowY][nowX] == false) {
find(nowY, nowX, mp, grid);
}
}
}
}
Leetcode_200_岛屿数量_dfs
最新推荐文章于 2025-05-12 01:00:00 发布
本文详细介绍了如何使用Java实现求解二维网格中的岛屿数量,通过Solution类中的find和numIslands方法,利用四邻域遍历策略,标记已发现的岛屿并计数。核心是利用boolean数组记录已访问位置,避免重复计算。

343

被折叠的 条评论
为什么被折叠?



