leetcode_200岛屿数量

通过遍历岛屿中为1的点,然后进行bfs,将"1"变成"0",岛屿填成海洋.进行计数.
空间复杂度:\O(min(M,N)),在最坏情况下,整个网格均为陆地,队列的大小可以达到 min(M,N)。斜对角线
注意在面试中需要问面试官可以直接在二维数组上进行更改吗?如果不可以自己另开一个数组.

from collections import deque
class Solution:

    def numIslands(self, grid: List[List[str]]) -> int:
        queue=collections.deque()
        count=0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]=="1":
                    grid[i][j]="0"
                    queue.append((i,j))
                    while queue:
                        x,y=queue.popleft()
                        for di in [(1,0),(0,1),(-1,0),(0,-1)]:
                            if 0<=x+di[0]<len(grid) and 0<=y+di[1]<len(grid[0]) and grid[x+di[0]][y+di[1]]!="0":
                                queue.append((x+di[0],y+di[1]))
                                grid[x+di[0]][y+di[1]]="0"
                    count+=1
        return count

使用栈进行递归版,与队列进行bfs非常相似.

from collections import deque
class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        stack=[]
        count=0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]=="1":
                    stack.append((i,j))
                    while stack:
                        x,y=stack.pop()
                        for di in [(1,0),(0,1),(-1,0),(0,-1)]:
                            if 0<=x+di[0]<len(grid) and 0<=y+di[1]<len(grid[0]) and grid[x+di[0]][y+di[1]]!="0":
                                stack.append((x+di[0],y+di[1]))
                                grid[x+di[0]][y+di[1]]="0"
                    count+=1
        return count

使用dfs函数进行解决

from collections import deque
class Solution:

    def numIslands(self, grid: List[List[str]]) -> int:
        def dfs(x,y):
            for di in [(1,0),(0,1),(-1,0),(0,-1)]:
                if 0<=x+di[0]<len(grid) and 0<=y+di[1]<len(grid[0]) and grid[x+di[0]][y+di[1]]!="0":

                    grid[x+di[0]][y+di[1]]="0" 
                    dfs(x+di[0],y+di[1])

        count=0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]=="1":
                    dfs(i,j)
                    count+=1
        return count
全部评论

相关推荐

03-05 17:03
已编辑
浙江工商大学 C++
陈好好wy:整体看下来有点空空的感觉,可以把每一段项目经历都再完善一下,然后用小标题的形式写个两到三条,目前看有点太简单了,不太能看出具体在这个项目里做了什么工作。还是要尽量把自己做的工作以量化的形式体现在简历上呢。
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务