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);
}
}
}
}