这是关于Project Euler问题#67的问题。 (找到三角形的最大路径)我知道在这些问题上寻求帮助可能是一种不好的尝试。
我有这些功能:
def chooseBest(rowOfTriangle):
if len(rowOfTriangle) == 1:
return rowOfTriangle
return list(max(element) for element in zip(rowOfTriangle[0:-1],rowOfTriangle[1:]))
和
def consolidatePath(rowOfTriangle , bestPath):
return list(sum(element) for element in zip(rowOfTriangle,bestPath))
适用于格式如下的数据集:
triangle = [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
这个三角形的解决方案如下:
consolidatePath(triangle[0],chooseBest(consolidatePath(triangle[1],chooseBest(consolidatePath(triangle[2],chooseBest(triangle[3]))))))
输出(正确):
[20]
写出每个嵌套函数调用远非最佳,并且当我扩展到问题的百行时将不可能。如何更改consolidatePath
和chooseBest
以在适当的时候互相呼叫?
编辑: 想出来了。
答案 0 :(得分:1)
这样的东西?
def max_path(triangle, idx=0, total=0):
if triangle:
row = triangle[0]
next = max(row[idx:idx+2])
return max_path(triangle[1:], row.index(next), total+next)
return total