Given a 2D grid consists of 0s (land) and 1s (water). An island is a maximal 4-directionally connected group of 0s and a closed island is an island totally (all left, top, right, bottom) surrounded by 1s.
Return the number of closed islands.
Example
Example 1:
1 2 3 4
Input: grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]] Output: 2 Explanation: Islands in gray are closed because they are completely surrounded by water (group of 1s).
classSolution{ int[][] direction = {{1,0},{-1,0},{0,1},{0,-1}}; publicintclosedIsland(int[][] grid){ if (grid.length == 0 || grid[0].length == 0) return0; for (int i = 0; i < grid.length; i++){ if (grid[i][0] == 0) helper(grid, i, 0); if (grid[i][grid[0].length - 1] == 0) helper(grid, i, grid[0].length - 1); } for (int i = 0; i < grid[0].length; i++){ if (grid[0][i] == 0) helper(grid, 0, i); if (grid[grid.length - 1][i] == 0) helper(grid, grid.length - 1, i); } int res = 0; for (int i = 0; i < grid.length; i++){ for (int j = 0; j < grid[0].length; j++){ if (grid[i][j] == 0){ res ++; helper(grid, i, j); } } } return res; } privatevoidhelper(int[][] grid, int x, int y){ if (grid[x][y] == 0) grid[x][y] = 1; for (int i = 0; i < direction.length; i++){ int nx = x + direction[i][0]; int ny = y + direction[i][1]; if (nx >= 0 && nx < grid.length && ny >= 0 && ny < grid[0].length && grid[nx][ny] == 0){ helper(grid, nx, ny); } } } }