200. Number of Islands
https://leetcode.com/problems/number-of-islands/
Python
DFS with Hashmap
- Time: O(M*N)
 - Space: O(K) # K present the block with
 
class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        m, n = len(grid), len(grid[0])
        offsets = [(0, 1), (0, -1), (1, 0), (-1, 0)]
        visited = set()
        def dfs(row: int, col: int, island: set):
            if grid[row][col] == "0":
                return set()
            island.add((row, col))
            for rx, cx in offsets:
                if row+rx < 0 or row+rx >= m or col+cx < 0 or col+cx >= n:
                    continue
                if (row+rx, col+cx) in island:
                    continue
                island |= dfs(row+rx, col+cx, island)
            return island
        ans = 0
        for row in range(m):
            for col in range(n):
                if grid[row][col] == '0' or (row, col) in visited:
                    continue
                ans += 1
                visited |= dfs(row, col, set())
        return ans