栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

leetcode day 2 【1905. 统计子岛屿】 BFS/DFS

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode day 2 【1905. 统计子岛屿】 BFS/DFS

解题思路
  • BFS

找到grid2中的每一座岛屿[暴力搜索整个grid矩阵],对每座岛屿BFS,过程中check岛屿格子是否在grid1中为岛屿。

class Solution:
    def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:

        row, col = len(grid2), len(grid2[0])
        def BFS(x:int, y:int) -> int:
            grid2[x][y]  = 0
            q = deque()
            q.append((x, y))
            check = (grid1[x][y] == 1)
            while(q):
                x, y = q.popleft()
                for nx ,ny in [(x-1,y),(x,y-1),(x+1,y),(x,y+1)]:
                    if 0<=nx 
  • DFS

DFS第一种:找到grid2中的每一座岛屿[暴力搜索整个grid矩阵],对每座岛屿DFS,过程中check岛屿格子是否在grid1中为岛屿。【这里用self.check作为全局变量,DFS中对其修改,无返回值】

class Solution:
    def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:

        row, col = len(grid2), len(grid2[0])
        self.check = True
        def DFS(x:int, y:int) -> int:
            for nx ,ny in [(x-1,y),(x,y-1),(x+1,y),(x,y+1)]:
                if 0<=nx 

DFS第二种:【这里用将check作为参数传入DFS中,并作为返回值】。这种方法其实不太好,因为每个递归DFS中都要开辟一个新的叫check的局部变量空间,这是没必要的。

class Solution:
    def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:

        row, col = len(grid2), len(grid2[0])
        def DFS(x:int, y:int, check:bool) -> int:
            for nx ,ny in [(x-1,y),(x,y-1),(x+1,y),(x,y+1)]:
                if 0<=nx 

从计算时间和内存消耗来看,还是BFS的效果好。

总结
  • 1.python的全局变量、局部变量

很有讲究,在函数内部一般是无法修改全局变量的

  • 解决方法是:

【推荐】①用self.check作为可修改的全局变量:详见上面DFS第一种写法
②通过参数传入DFS函数:详见上面DFS第二种写法


python中函数的定义,调用,全局变量,局部变量,函数的嵌套使用-初级篇

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357338.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号