zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    如何用grep命令同时显示匹配行上下的n行 (美团面试题目)
    Maven面试宝典
    Java经典设计模式 总览
    Java设计模式之工厂模式
    Java设计模式
    三次握手,四次挥手 具体发送的报文和状态都要掌握(阿里)
    运动与饮食结合
    健身计划
    Java中的多线程=你只要看这一篇就够了
    js禁止复制粘贴
  • 原文地址:https://www.cnblogs.com/seyjs/p/11841246.html
Copyright © 2011-2022 走看看