python - Python 遍历 2dDarray
问题描述
我有一个二维数组
grid = [[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
现在基于存在的点1
,我想创建一个新数组并保存到它的所有点的距离。例子
dp = [[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7]]
我RuntimeError: maximum recursion depth exceeded
不确定我错过了什么。
def minTotalDistance(grid):
dp = [[0]*len(grid[0]) for _ in range(len(grid))]
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 1:
dfs(i, j, dp, 1)
print dp
def dfs(i, j, dp, val):
if i < 0 or i >= len(dp) or j < 0 or j >= len(dp[0]):
return 0
dp[i][j] = val
dfs(i - 1, j, dp, val+1)
dfs(i + 1, j, dp, val+1)
dfs(i, j - 1, dp, val+1)
dfs(i, j + 1, dp, val+1)
grid = [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0]]
minTotalDistance(grid)
解决方案
我认为这里的问题在于您的递归调用。例如,当您调用dfs(0, 0, dp, val)
will call dfs(0-1, 0, dp, val)
which return 但随后它将调用dfs(1, 0, dp, val)
which then calls时dfs(1 - 1, 0, dp, val)
。这里 dp 和 val 与递归无关,因为它们不会以任何方式终止函数。请注意,就 i 和 j 而言,最后一次调用等同于第一次调用,它们只是重复循环,直到调用堆栈超出内存边界并出现错误。
推荐阅读
- asp.net - 有什么方法可以在模型中预先定义查询,只要从上下文中调用该模型就运行
- flutter - 如何注册自己的 Flutter 插件?
- linux - 配置 OpenID Connect (OIDC) 身份验证
- javascript - 如何在子进程中使用 pm2?
- node.js - 解析用户上传的 PDF,然后将 PDF 数据写入 JSON
- angular - 我不能在 Angular 12 中迭代对象(只允许使用数组和可迭代对象)
- microsoft-graph-api - 活动项目中缺少类别
- python - webscraping,find()函数不起作用
- excel - 匹配 Excel 的多列并突出显示该值是否完全或部分匹配某些字符
- html - 通过 Checkbox:Checked 更改特定元素的样式