Number of Islands — BFS or DFS Flood Fill
Advertisement
Problem 285 · Number of Islands
Difficulty: Medium · Pattern: Grid BFS/DFS
Solutions
# Python — BFS
from collections import deque
def numIslands(grid):
m, n = len(grid), len(grid[0])
count = 0
for r in range(m):
for c in range(n):
if grid[r][c] == '1':
count += 1
queue = deque([(r,c)])
grid[r][c] = '0'
while queue:
x, y = queue.popleft()
for dx, dy in [(0,1),(0,-1),(1,0),(-1,0)]:
nx, ny = x+dx, y+dy
if 0<=nx<m and 0<=ny<n and grid[nx][ny]=='1':
grid[nx][ny]='0'
queue.append((nx,ny))
return count
// Java — DFS
public int numIslands(char[][] grid) {
int m=grid.length, n=grid[0].length, count=0;
for (int r=0;r<m;r++) for (int c=0;c<n;c++)
if (grid[r][c]=='1') { dfs(grid,r,c); count++; }
return count;
}
void dfs(char[][] grid, int r, int c) {
if (r<0||r>=grid.length||c<0||c>=grid[0].length||grid[r][c]!='1') return;
grid[r][c]='0';
dfs(grid,r+1,c); dfs(grid,r-1,c); dfs(grid,r,c+1); dfs(grid,r,c-1);
}
Complexity
- Time: O(m*n)
- Space: O(min(m,n)) BFS queue
Advertisement