欢迎光临散文网 会员登陆 & 注册

※Leetcode Day16 2

2022-04-21 22:18 作者:我喜欢喝一点点  | 我要投稿

200. 岛屿数量

你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。


岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。


此外,你可以假设该网格的四条边均被水包围。


 


示例 1:


输入:grid = [

  ["1","1","1","1","0"],

  ["1","1","0","1","0"],

  ["1","1","0","0","0"],

  ["0","0","0","0","0"]

]

输出:1

示例 2:


输入:grid = [

  ["1","1","0","0","0"],

  ["1","1","0","0","0"],

  ["0","0","1","0","0"],

  ["0","0","0","1","1"]

]

输出:3


这道题蛮重要的,频率蛮高,做个标记吧,dfs就行,遍历过的话就将这个设置为0

class Solution:

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

        clen=len(grid)

        llen=len(grid[0])

        def dfs(grid,i,j):

            if not 0<=i<clen or not 0<=j<llen or grid[i][j]=='0':

                return

            grid[i][j]='0'

            dfs(grid,i+1,j)

            dfs(grid,i-1,j)

            dfs(grid,i,j+1)

            dfs(grid,i,j-1)

        res=0

        for i in range(clen):

            for j in range(llen):

                if grid[i][j]=='1':

                    dfs(grid,i,j)

                    res+=1

        return res


后面进行了一个剪枝,就是先判断能不能去,不为1的就不去。


优化后大概是优化了1/3这样,还不错的

※Leetcode Day16 2的评论 (共 条)

分享到微博请遵守国家法律