三角形最小路径和
题目描述:
给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。提示:1 <= triangle.length <= 200triangle[0].length == 1triangle[i].length == triangle[i - 1].length + 1-10 ^4 <= triangle[i][j] <= 10 ^4
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int len = triangle.size();
int[][] dp = new int[len][len];
dp[0][0] = triangle.get(0).get(0);
for(int i = 1 ; i<len ; i++ ){
dp[i][0] = dp[i-1][0]+triangle.get(i).get(0);
int j = 1;
for(; j<i ; j++){
dp[i][j] = Math.min(dp[i-1][j-1],dp[i-1][j])+triangle.get(i).get(j);
}
dp[i][j] = dp[i-1][j-1]+triangle.get(i).get(j);
}
int minSum = dp[len-1][0];
for(int i = 1 ; i<len ; i++){
if(minSum > dp[len-1][i]){
minSum = dp[len-1][i];
}
}
return minSum;
}
}
典型的动态规划题目,这里定义了一个存储数组dp用于存取每条路径上的最小路径和。详细请看代码,有疑问欢迎留言。