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
全部评论

相关推荐

Tom哥981:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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