【leetcode】1254. Number of Closed Islands

题目如下:

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 1:

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).

Example 2:

Input: grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]]
Output: 1

Example 3:

Input: grid = [[1,1,1,1,1,1,1],
               [1,0,0,0,0,0,1],
               [1,0,1,1,1,0,1],
               [1,0,1,0,1,0,1],
               [1,0,1,1,1,0,1],
               [1,0,0,0,0,0,1],
               [1,1,1,1,1,1,1]]
Output: 2 

Constraints:

  • 1 <= grid.length, grid[0].length <= 100
  • 0 <= grid[i][j] <=1

解题思路:典型的BFS/DFS的场景,没什么好说的。

代码如下:

class Solution(object):
    def closedIsland(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        visit = [[0] * len(grid[0]) for _ in grid]
        res = 0
        for i in range(len(grid)):
            for j in range(len(grid[i])):
                if grid[i][j] == 1 or visit[i][j] == 1:continue
                queue = [(i,j)]
                visit[i][j] = 1
                closed = True
                while len(queue) > 0:
                    x,y = queue.pop(0)
                    if x == 0 or x == len(grid) - 1 or y == 0 or y == len(grid[0]) - 1:
                        closed = False
                    direction = [(0,1),(0,-1),(1,0),(-1,0)]
                    for (x1,y1) in direction:
                        if x + x1 >= 0 and x + x1 < len(grid) and y + y1 >= 0 \
                                and y + y1 < len(grid[0]) and visit[x+x1][y+y1] == 0\
                                and grid[x+x1][y+y1] == 0:
                            queue.append((x+x1,y+y1))
                            visit[x+x1][y+y1] = 1
                if closed:res += 1
        return res

 

posted @ 2019-11-12 13:20  seyjs  阅读(424)  评论(0编辑  收藏  举报