美文网首页
LeetCode 1254 Number of Closed I

LeetCode 1254 Number of Closed I

作者: 夜空中最亮的星Simon | 来源:发表于2020-12-30 09:50 被阅读0次

    一个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

    相关文章

      网友评论

          本文标题:LeetCode 1254 Number of Closed I

          本文链接:https://www.haomeiwen.com/subject/xibcoktx.html