200. Number of Islands

https://leetcode.com/problems/number-of-islands/

solution

flood fill

  • dfs

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        m = len(grid)
        n = len(grid[0])
        visited = [[False] * n for _ in range(m)]
        dirs = [[0, 1], [1, 0], [0, -1], [-1, 0]]
        res: int = 0

        for i in range(m):
            for j in range(n):
                if grid[i][j] == '1' and not visited[i][j]:
                    res += 1
                    self.dfs(i, j, grid, dirs, visited)
        return res

    def dfs(self, i, j, grid, dirs, visited):
        if grid[i][j] == '0' or visited[i][j]:
            return

        visited[i][j] = True

        for dir in dirs:
            new_i = i + dir[0]
            new_j = j + dir[1]
            if new_i < 0 or new_i >= len(grid) or new_j < 0 or new_j >= len(grid[0]):
                continue

            self.dfs(new_i, new_j, grid, dirs, visited)

时间复杂度:O(mn) 空间复杂度:O(mn)

  • bfs

时间复杂度:O(mn) 空间复杂度:O()

  • union find

follow up-岛屿类

  • 大数据量: grid特别大,放不进内存,你怎么做?

    • union-find有巨大优势,可以一行一行的处理,这样每次读入内存两行数据就行

305 Number of Islands II

1905. Count Sub Islands

  • 遍历图1为水、图2为岛的图2所有岛屿,标记为水;然后统计图2的岛屿

时间复杂度:O() 空间复杂度:O()

827. Making A Large Island

时间复杂度:O() 空间复杂度:O()

1020. Number of Enclaves

时间复杂度:O() 空间复杂度:O()

1254. Number of Closed Islands

时间复杂度:O() 空间复杂度:O()

  • 有case不通过的错误做法, 还没去找原因

463. Island Perimeter

时间复杂度:O() 空间复杂度:O()

Last updated