LeetCode 200
这个题目可以用dfs,bfs,或者union finder,还是比较直接的,只要把所有链接的都走玩就可以了。
下面实现的用了额外的内存,实际上也可以直接修改数组本身改成另外一个值,这样可以节省空间,主要看是否允许改变原来的数组。
def numIslands(self, grid: List[List[str]]) -> int:
if grid == None or len(grid) == 0: return 0
m = len(grid)
n = len(grid[0])
visited = [[False]*n for i in range(m)]
def dfs (grid, visited, sx, sy, m, n):
if visited[sx][sy]: return
visited[sx][sy] = True
for dx,dy in [[1,0],[-1,0],[0,1],[0,-1]]:
nx = sx + dx
ny = sy + dy
if 0 <= nx < m and 0 <=ny <n and visited[nx][ny] == False and grid[nx][ny] == '1':
dfs(grid,visited, nx, ny, m,n)
count = 0
for i in range(m):
for j in range(n):
if grid[i][j] == '1' and visited[i][j] == False:
count +=1
dfs(grid,visited, i,j, m,n)
return count