1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { private static final int[][] DIRECTIONS = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public int numIslands(char[][] grid) { int m = grid.length, n = grid[0].length;
int landCount = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == '1') { bfs(grid, m, n, i, j); landCount++; } } }
return landCount; }
private void bfs(char[][] grid, int m, int n, int i, int j) { Queue<int[]> queue = new LinkedList<>(); grid[i][j] = '0'; queue.offer(new int[]{i, j});
while (!queue.isEmpty()) { int[] point = queue.poll(); for (int[] direction : DIRECTIONS) { int nextI = point[0] + direction[0]; int nextJ = point[1] + direction[1];
if (nextI < 0 || nextI >= m || nextJ < 0 || nextJ >= n || grid[nextI][nextJ] == '0') { continue; }
grid[nextI][nextJ] = '0'; queue.offer(new int[]{nextI, nextJ}); } } } }
|