# This question is from LeetCode # https://leetcode.com/problems/number-of-islands/description/ # Also asked by Amazon interviewers # Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands. # # An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water. # # # # Example 1: # # Input: grid = [ # ["1","1","1","1","0"], # ["1","1","0","1","0"], # ["1","1","0","0","0"], # ["0","0","0","0","0"] # ] # Output: 1 # Example 2: # # Input: grid = [ # ["1","1","0","0","0"], # ["1","1","0","0","0"], # ["0","0","1","0","0"], # ["0","0","0","1","1"] # ] # Output: 3 # # # Constraints: # # m == grid.length # n == grid[i].length # 1 <= m, n <= 300 # grid[i][j] is '0' or '1'. class Solution: def numIslands(self, grid: List[List[str]]) -> int: if not grid: return 0 rows, cols = len(grid), len(grid[0]) count = 0 def dfs(i, j): if 0 <= i < rows and 0 <= j < cols and grid[i][j] == '1': grid[i][j] = '0' dfs(i + 1, j) dfs(i - 1, j) dfs(i, j + 1) dfs(i, j - 1) for i in range(rows): for j in range(cols): if grid[i][j] == '1': count += 1 dfs(i, j) return count