题目
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。
例如,给定三角形:
自顶向下的最小路径和为
11
(即,2 + 3 + 5 + 1 = 11)。
动态规划
假设dp[i][j]
是处于位置(i, j)
时的最小路径总和.
由于位置(i, j)
只能从位置(i-1,j-1)
和位置(i-1, j)
过来, 那么可以很容易的知道动态转移方程为:
dp
初始化
对dp
所有元素初始赋值为Integer.MAX_VALUE
, 方便进行比较最小值.
需要注意的是, dp[i][0]
只能从上方转移, 所以初始化的时候需要另外处理.
代码如下
1 | class Solution { |