Python程序:查找可收集到的最大硬币数量
假设我们有一个二维矩阵,每个单元格存储一些硬币。如果我们从[0,0]开始,只能向右或向下移动,我们必须找到到达右下角可以收集到的最大硬币数量。
因此,如果输入如下所示:
1 | 4 | 2 | 2 |
0 | 0 | 0 | 5 |
那么输出将是14,因为我们选择路径:[1, 4, 2, 2, 5]
为了解决这个问题,我们将遵循以下步骤:
对于 r 从 1 到 A 的行数,执行:
A[r, 0] := A[r, 0] + A[r-1, 0]
对于 c 从 1 到 A 的列数,执行:
A[0, c] := A[0, c] + A[0, c-1]
对于 r 从 1 到 A 的大小,执行:
对于 c 从 1 到 A[0] 的大小,执行:
A[r, c] = A[r, c] + max(A[r-1, c], A[r, c-1])
返回 A 的右下角的值
让我们看看下面的实现来更好地理解:
示例
class Solution: def solve(self, A): for r in range(1, len(A)): A[r][0] += A[r-1][0] for c in range(1, len(A[0])): A[0][c] += A[0][c-1] for r in range(1, len(A)): for c in range(1, len(A[0])): A[r][c] += max(A[r-1][c], A[r][c-1]) return A[-1][-1] ob = Solution() matrix = [ [1, 4, 2, 2], [6, 0, 0, 5] ] print(ob.solve(matrix))
输入
matrix = [ [1, 4, 2, 2], [6, 0, 0, 5] ]
输出
14
广告