The thought is to search for four directions. Note not to search repeatedly.
Solution:
# T:O(m*n) S:O(m*n)
class Solution:
# @param {boolean[][]} grid a boolean 2D matrix
# @return {int} an integer
def numIslands(self, grid):
if not grid:
return 0
row = len(grid)
col = len(grid[0])
used = [[False for j in xrange(col)] for i in xrange(row)]
count = 0
for i in xrange(row):
for j in xrange(col):
if grid[i][j] == '1' and not used[i][j]:
self.dfs(grid, used, row, col, i, j)
count += 1
return count
def dfs(self, grid, used, row, col, x, y):
if grid[x][y] == '0' or used[x][y]:
return
used[x][y] = True
if x != 0:
self.dfs(grid, used, row, col, x - 1, y)
if x != row - 1:
self.dfs(grid, used, row, col, x + 1, y)
if y != 0:
self.dfs(grid, used, row, col, x, y - 1)
if y != col - 1:
self.dfs(grid, used, row, col, x, y + 1)
Run Time: 136 ms
No comments:
Post a Comment