描述
该题来自于力扣第120题
分析
有一种典型的动态规划问题,记dp[i][j]
为从山顶到达第i
行第j
列的最短路径,那么能达到(i, j)
这个位置的上一个位置只能是(i-1, j-1)
和(i-1, j)
,从而转移方程为dp[i][j] = min(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j]
;
看本题的要求是O(n)
的额外空间,从而直接使用triangle
作为状态存储,即triangle[i][j] += min(triangle[i-1][j], triangle[i-1][j-1])
,注意下边界条件就好;最后取最终层的最小值就好。
一种等价但是代码更加简洁的方法就是从山底向山顶状态转移,这样最终结果就是算完后山顶的值。
代码
1 | class Solution: |