BFS from each unvisited land cell. Count BFS starts.
function numIslands(grid): if not grid: return 0 count = 0 m, n = len(grid), len(grid[0]) for i in range(m): for j in range(n): if grid[i][j] == '1': count += 1 queue = [(i, j)] grid[i][j] = '0' while queue: r, c = queue.pop(0) for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]: nr, nc = r + dr, c + dc if 0 <= nr < m and 0 <= nc < n and grid[nr][nc] == '1': queue.append((nr, nc)) grid[nr][nc] = '0' return count
time.