
class Solution { private int count; private int[][] direc = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; public int numIslands(char[][] grid) { if (grid == null || grid.length == 0 || grid[0].length == 0) return 0; int m = grid.length, n = grid[0].length; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == '1') { count++; fill(grid, i, j); } } } return count; } private void fill(char[][] grid, int x, int y) { if (x < 0 || y < 0 || x == grid.length || y == grid[0].length) return; if (grid[x][y] != '1') return; grid[x][y] = '#'; for (int i = 0; i < 4; i++) { int nextX = x + direc[i][0]; int nextY = y + direc[i][1]; fill(grid, nextX, nextY); } }}