【发布时间】:2020-10-30 15:01:37
【问题描述】:
我很困惑。我不明白如何通过更改DFS 来更新numIslands 中的visited。
我的理解是visited,一旦传入DFS,就像是原始visited的副本。
不是这样吗?
class Solution:
def DFS(self, grid, visited, i, j):
if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]) or visited[i][j] or grid[i][j] == '0':
return
visited[i][j] = True
self.DFS(grid, visited, i+1, j)
self.DFS(grid, visited, i-1, j)
self.DFS(grid, visited, i, j+1)
self.DFS(grid, visited, i, j-1)
def numIslands(self, grid: List[List[str]]) -> int:
if not grid: return 0
visited = [[False for i in range(len(grid[0]))] for j in range(len(grid))]
count = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1' and visited[i][j] == False:
self.DFS(grid, visited, i, j) # TODO
count += 1
return count
【问题讨论】:
-
Python 通过引用而不是值传递。出现在
DFS()中的visited是您从numIslands()传递的同一对象的不同名称。您可以在不更改原始值的情况下重新分配名称visited,但如果您更改名称visited所指的对象(通过更改特定索引visited[i][j] = True),那么更改将持续存在,因为它是同一个对象。 -
"就像是访问的原件的副本。不是这样吗?"不,你不是。您可以使用docs.python.org/3.8/library/copy.html 创建一个副本
标签: python python-3.x scope