Given a 2d grid map of'1's (land) and'0's (water), count 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.
class Solution(object):
def numIslands(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
# 先判断行是否为0,再判断列是否为0
if len(grid) == 0 or len(grid[0]) == 0:
return 0
row = len(grid)
col = len(grid[0])
count = 0
for i in range(row):
for j in range(col):
if grid[i][j] == '1':
count += 1
self.dfsHelper(grid, i, j)
return count
def dfsHelper(self, grid, i, j):
if grid[i][j] == '0':
return
grid[i][j] = '0'
# up
if i-1 >= 0:
self.dfsHelper(grid, i-1, j)
# down
if i+1<=len(grid)-1:
self.dfsHelper(grid, i+1, j)
# left
if j-1>=0:
self.dfsHelper(grid, i, j-1)
# right
if j+1<=len(grid[0])-1:
self.dfsHelper(grid, i, j+1)
BFS
BFS is to search and store every possible directions(solutions) using a queue usually, then search from the head of the queue each time.
class Solution(object):
def numIslands(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
# 先判断行是否为0,再判断列是否为0
if len(grid) == 0 or len(grid[0]) == 0:
return 0
row = len(grid)
col = len(grid[0])
count = 0
for i in range(row):
for j in range(col):
if grid[i][j] == '1':
count += 1
self.bfsHelper(grid, i, j)
return count
def bfsHelper(self, grid, i, j):
queue = [(i,j)]
while queue:
x,y = queue.pop(0)
if grid[x][y] == '0':
continue
grid[x][y] = '0'
# up
if x-1 >= 0:
queue.append((x-1, y))
# down
if x+1<=len(grid)-1:
queue.append((x+1,y))
# left
if y-1>=0:
queue.append((x,y-1))
# right
if y+1<=len(grid[0])-1:
queue.append((x,y+1))