Number of Islands

https://leetcode.com/explore/learn/card/queue-stack/231/practical-application-queue/1374/

这道题最容易理解的是DFS, 但是套用BFS的模板也可以做出来。

DFS Version

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        def dfs(i,j,grid):
            m = len(grid)
            n = len(grid[0])
            if i < 0 or i >= m or j < 0 or j >= n or grid[i][j] == "0":
                return
            grid[i][j] = "0"
            dfs(i-1,j,grid)
            dfs(i+1,j,grid)
            dfs(i,j-1,grid)
            dfs(i,j+1,grid)
        cnt = 0
        m = len(grid)
        if m == 0:
            return cnt
        n = len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j] == "1":
                    dfs(i,j,grid)
                    cnt+=1
        return cnt

BFS Version

from collections import deque
class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        queue = deque()
        cnt = 0
        m = len(grid)
        dirs = [(0,1),(0,-1),(1,0),(-1,0)]
        if m == 0:
            return cnt
        n = len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j] == "1":
                    cnt+=1
                    queue.append((i,j))
                    grid[i][j] = "0"
                    while queue:
                        x,y = queue.popleft()
                        for d in dirs:
                            newX,newY = x+d[0],y+d[1]
                            if 0<=newX < m and 0<= newY <n and grid[newX][newY] =="1":
                                queue.append((newX,newY))
                                grid[newX][newY] = "0"
        return cnt

Last updated

Was this helpful?