问题:
题目来源:力扣(LeetCode)
难度:中等
分析:
动态规划题。这个题的递推公式不难找,需要注意的是每行的行首和行尾需要单独讨论。还有一点是,在做空间优化的时候是从后向前迭代的。
dp[i][j] 代表的是到dp[i][j] 为止的最小路径和。
递推公式:
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j]
每行首尾处理:
dp[i][0] = dp[i - 1][0] + triangle[i][0]
dp[i][i] = dp[i - 1][i - 1] + triangle[i][i]
解决方法:
1:二维DP
空间复杂第O(n^2),也可以建立与原数组相同大小的数组,将空间复杂度降低一半。
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
r = len(triangle)
dp = [[0] * r for _ in range(r)