【发布时间】:2017-09-27 05:47:21
【问题描述】:
我目前正在尝试解决欧拉问题 18 (https://projecteuler.net/problem=18),使用“蛮力”方法检查所有可能的路径。到目前为止,我一直在尝试更小的“模型”三角形。 我正在使用列表推导来创建一个列表列表,其中内部列表将包含该行的索引,例如:
lst = [[a,b,c,d] for a in [0] for b in [0,1] for c in [0,1,2] for d in
[0,1,2,3] if b == a or b == a + 1 if c == b or c == b + 1 if d == c or d ==
c + 1]
这给了我想要的列表列表,即:
[[0,0,0,0],[0,0,0,1],[0,0,1,1],[0,0,1,2],[0,1,1,1],[0,1,1,2],[0,1,2,2],
[0,1,2,3]]
注意:if 条件确保它只移动到三角形下一行中的相邻数字,所以
lst[i][j] = lst[i][j-1] or lst[i][j] = lst[i][j]-1
在我达到这一点之后,我打算对每个内部列表,我会采用与这些索引相关的数字(所以 [0,0,0,0] 将是 3,7,2,8)并对它们求和,这样就可以得到所有可能的和,然后取其中的最大值。
问题是,如果我将其放大到大三角形,我的列表理解中将有 15 个 'for's 和 'if's。似乎必须有一个更简单的方法!我对 Python 还很陌生,所以希望有一些我可以利用的明显功能,我到目前为止还没有意识到!
【问题讨论】:
-
您可能想查看
dynamic programming算法以提高计算效率。 -
我对动态编程进行了一些研究,但我想先尝试使用蛮力解决它。
标签: python list list-comprehension