-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path200NumberOfIslands.py
33 lines (26 loc) · 1.1 KB
/
200NumberOfIslands.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
# using DFS
# Idea: scan the 2d array, it a node contains one, increase the number of islands and triggger dfs from this node in 4 directions recursively, marking nodes as visited which encompass current island area.
if not grid:
return 0
nr = len(grid)
nc = len(grid[0])
num_islands = 0
for r in range(nr):
for c in range(nc):
if grid[r][c] =="1":
num_islands +=1
self.dfs(grid, r,c)
return num_islands
def dfs(self, grid, r, c)-> None:
nr = len(grid)
nc = len(grid[0])
# return if outside Boundary or already visited or not part of island
if r <0 or c<0 or r>=nr or c >= nc or grid[r][c] =="0":
return;
grid[r][c] ='0' # marked visited
self.dfs(grid, r, c-1) # left
self.dfs(grid, r, c+1) # right
self.dfs(grid, r-1, c) # top
self.dfs(grid, r+1, c) # bottom