数字三角形
题目
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
注意事项
如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例
比如,给出下列数字三角形:
题解
DP问题
由于从上向下递推需要对每行中首末元素单独递推,稍显麻烦,顾在此采用从下向上递推的方式,状态转移方程是:triangle[i][j] = Math.min(triangle[i + 1][j],triangle[i + 1][j + 1]) + triangle[i][j];
public class Solution {
/**
* @param triangle: a list of lists of integers.
* @return: An integer, minimum path sum.
*/
public int minimumTotal(int[][] triangle) {
int n = triangle.length;
for (int i = n-2; i >=0; i--)
{
for (int j = 0; j < triangle[i].length; j++)
{
triangle[i][j] = Math.min(triangle[i + 1][j],triangle[i + 1][j + 1]) + triangle[i][j];
}
}
return triangle[0][0];
}
}
Last Update 2016.9.5