LeetCode 1254 Number of Closed I

2020-12-30  本文已影响0人  夜空中最亮的星Simon

一个2D格子由0和1组成。0代表陆地,1代表水。

题目:统计有多少个最接近的陆地。

最接近的陆地:上下左右必须全部被1包围,边界如果为0的不算在内。

例子1:

图1

例子2:

图2

解答:<Python>

class Solution:

    def closedIsland(self, grid: List[List[int]]) -> int:

        # 先排除一些特例

        if not grid and not grid[0]:

            return 0

        # 求出行数和列数

        m, n = len(grid), len(grid[0])

        # 定义递归方法

        def dfs(i, j, flag):

            if 0<=i<m and 0<=j<n and grid[i][j]==0:

                # 找到0后把它变为1

                grid[i][j]=flag

                # 遍历右侧

                dfs(i, j+1, flag)

                # 遍历下侧

                dfs(i+1, j, flag)

                # 遍历左侧

                dfs(i, j-1, flag)

                # 遍历上侧

                dfs(i-1, j, flag)

        # 消除掉边境是陆地的(即grid[i][j]==0)    

        for i in range(m):

            for j in range(n):

                if (i==0 or j==0 or i==m-1 or j==n-1) and grid[i][j]==0:

                    dfs(i,j,1)

        # 边界已经由于上一步规整为1,现在找境内的0, 统计得到最终答案            

        answer = 0

        for i in range(m):

            for j in range(n):

                if grid[i][j]==0:

                    dfs(i,j,1)

                    answer+=1

        return answer

上一篇 下一篇

猜你喜欢

热点阅读