【发布时间】:2019-03-24 04:24:14
【问题描述】:
问题是存在一个数字金字塔,而您正试图通过“滑行”金字塔来找到最大的总和。
我做了一个基本的“记忆”技术,方法是创建一个数组并在每个函数调用中传递它。显然,这并不理想,因为数组是固定大小的,我不能让数组依赖于初始金字塔大小,因为可选参数必须独立于它。我不确定如何使数组大小取决于金字塔的大小,而无需对其进行硬编码或在调用函数时显式询问初始数组和初始大小。
def LSD2(pyramid, m = 0, n = 0, L = []):
if len(L) == 0:
L = [[None]*1000 for i in range(1000)]
if len(pyramid) == 0:
return 0
else:
if L[n][m] != None:
return L[n][m]
elif L[n-1][m] != None and L[n-1][m-1] != None:
return max(pyramid[n][m] + max(L[n-1][m], L[n-1][m-1]))
L[n][m] = pyramid[0][m] + max(LSD2(pyramid[1:], m, n + 1, L), LSD2(pyramid[1:], m+1, n + 1, L))
return L[n][m]
【问题讨论】:
-
Python 没有数组,它有列表并且它们不是固定大小的。
-
如果
m和n分别是行和列,则可以通过n数组初始化m,如l = [[None] * n for _ in range(m)]
标签: python memoization