📅  最后修改于: 2023-12-03 14:48:47.936000             🧑  作者: Mango
在给定的一个三角形中,找出一条从顶部到底部的路径,使得路径上的所有数字之和最小。每一步只能移动到下一行相邻数字上。
这个问题可以用动态规划算法来解决。我们可以从三角形的底部开始,自底向上地计算每个位置的最小和路径。最后,顶部的位置即为路径的起点,路径的最小和即为顶部位置的值。
我们用一个二维数组 dp
来表示每个位置的最小和路径。其中 dp[i][j]
表示第 i
行第 j
列位置的最小和路径。
我们从底部开始,自底向上地计算每个位置的最小和路径。对于每个位置 (i, j)
,它的下一行相邻数字有两个,即 (i+1, j)
和 (i+1, j+1)
。我们选择其中最小的那个数字加上当前位置的数字作为 dp[i][j]
的值。
状态转移方程为:
dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]
最底层的路径即为最小路径。我们可以先将 dp
数组的最后一行初始化为三角形的最后一行。
最终,路径的最小和即为 dp[0][0]
的值。
def minimumTotal(triangle):
rows = len(triangle)
dp = triangle[-1] # 初始化最后一行
for i in range(rows-2, -1, -1):
for j in range(i+1):
dp[j] = min(dp[j], dp[j+1]) + triangle[i][j]
return dp[0]
# 测试样例
triangle = [
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
result = minimumTotal(triangle)
print(f"The minimum total of the path is {result}.")
该代码实现了给定一个示例三角形后,计算出路径的最小和。
注意:此处为 Python 代码示例,你也可以使用其他编程语言去实现相同的逻辑。
通过动态规划算法,我们可以高效地解决三角形中的最小和路径问题。该问题经常在算法和动态规划相关的面试题中出现。熟练掌握该算法可以提高程序员的编程技能和面试竞争力。