【发布时间】:2021-01-02 18:57:12
【问题描述】:
给定一个由“1”(陆地)和“0”(水)组成的 m x n 2d 网格图,返回岛屿的数量。
岛屿四面环水,由相邻陆地水平或垂直连接而成。您可以假设网格的所有四个边缘都被水包围。
https://leetcode.com/problems/number-of-islands/
我的解决方案:
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
no = 0 # number of islands
visited = set()
rows, cols = len(grid), len(grid[0])
def visit(row, col):
if (row, col) in visited or grid[row][col] != "1": return False
q = deque()
q.append((row, col))
while q:
row, col = q.popleft()
if (row, col) in visited or grid[row][col] != "1": continue
visited.add((row, col))
# Visit left
if col > 0:
q.append((row, col - 1))
# Visit right
if col < cols - 1:
q.append((row, col + 1))
# Visit top
if row > 0:
q.append((row - 1, col))
# Visit bottom
if row < rows - 1:
q.append((row + 1, col))
return True
for row in range(rows):
for col in range(cols):
if visit(row, col):
no += 1
return no
它只优于约 40% 的解决方案,因此显然有一些可以改进的地方。它是什么?我错过了什么?
【问题讨论】: