【发布时间】:2019-04-17 05:26:52
【问题描述】:
我正在努力解决问题Number of Islands - LeetCode
给定
'1's(陆地)和'0's(水)的二维网格图,计算岛屿的数量。岛屿四面环水,由相邻陆地水平或垂直连接而成。您可以假设网格的所有四个边缘都被水包围。示例 1:
Input: 11110 11010 11000 00000 Output: 1示例 2:
Input: 11000 11000 00100 00011 Output: 3
公认的解决方案是:
#Recursively solution
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
if not grid:
return 0
step = 0
r, c = len(grid), len(grid[0])
visited = [[False for _ in range(c)] for _ in range(r)]
for i in range(r):
for j in range(c):
if grid[i][j] == "1" and not visited[i][j]:
step += 1
self.dfs(grid, i, j, visited)
return step
def dfs(self, grid, i, j, visited):
if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]) or grid[i][j] != '1' or visited[i][j]:
return
visited[i][j] = True
self.dfs(grid, i+1, j, visited)
self.dfs(grid, i-1, j, visited)
self.dfs(grid, i, j+1, visited)
self.dfs(grid, i, j-1, visited)
解决方案混合使用了递归和迭代。
如何仅通过递归解决问题?
【问题讨论】:
-
我只是出于好奇。如果它迭代地工作,为什么要它是递归的?
-
从技术上讲,您可以对其进行 DFS,而不是迭代 map,但调用堆栈可能会膨胀太多。 Idk 是否有限制。
-
cos,我正在练习递归@AlbinPaul