【发布时间】:2021-04-01 15:16:42
【问题描述】:
上下文:https://leetcode.com/problems/minimum-path-sum/
这个问题的动态规划解决方案如下所示:
from math import inf
def min_path(grid, y, x):
matrix = [[0] * (y + 1) for _ in range(x + 1)]
matrix[0][0] = grid[0][0]
for i, row in enumerate(matrix):
for j, n in enumerate(row):
if i == 0 and j == 0:
continue
matrix[i][j] = grid[i][j] + min(i and matrix[i-1][j] or inf, j and matrix[i][j-1] or inf)
return matrix[x][y]
print(min_path([[1, 2, 3],
[4, 8, 2],
[1, 5, 3]], 2, 2))
但是,这种方法只返回最小/最大和路径。有没有一种简洁的方法来获得构成最佳路径的数字的实际索引?
【问题讨论】:
-
post 中的代码不起作用(至少因为第 10 行的语法错误 - 加号 - 并且未定义 inf)。此外,像这里这样创建矩阵会导致您意想不到的结果。
[0]*(x+1)返回列表,如果其中任何一个元素发生更改,所有元素都将同步更改,因为它们引用相同的内存。但是如果你能解决这个问题,获取路径和值很简单:只需保留网格元组(长度、完整路径作为元组或列表)而不是单个值。如果需要,您还可以创建第二个矩阵来存储路径。 -
好吧,我会在 30 分钟后查看,如果没有人会更快,我会尝试发布代码
标签: python algorithm dynamic-programming