标签:get ++i turn minimum new leetcode 三角形 public 移动
三角形最小路径
链接:三角形最小路径和
//设 d[i][j]为[0,0]到[i,j]的最短路径
/*由于每一步只能移动到下一行「相邻的节点」上,
因此要想走到位置 (i, j)(i,j),上一步就只能在位置 (i - 1, j - 1)(i?1,j?1) 或者位置 (i - 1, j)(i?1,j)。
我们在这两个位置中选择一个路径和较小的来进行转移,状态转移方程为:
f[i][j] =min(f[i-1][j-1], f[i-1][j]) + c[i][j]
*/
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int[][] d=new int[triangle.size()+1][triangle.get(triangle.size()-1).size()+1];
d[0][0]=triangle.get(0).get(0);
for(int i=1;i<triangle.size();i++){
for(int j=0;j<triangle.get(i).size();j++){
//三角形左边的状态转移方程
if(j==0){
d[i][j]=d[i-1][j]+triangle.get(i).get(j);
}
//右边的
else if(j==triangle.get(i).size()-1){
d[i][j]=d[i-1][j-1]+triangle.get(i).get(j);
}
//中间部分
else{
d[i][j]=Math.min(d[i-1][j],d[i-1][j-1])+triangle.get(i).get(j);
}
}
}
//找出最后一层最小的数即为最短路径
int min = d[triangle.size() - 1][0];
for (int i = 1; i < triangle.size(); ++i) {
min = Math.min(min, d[triangle.size() - 1][i]);
}
return min;
}
}
标签:get ++i turn minimum new leetcode 三角形 public 移动
原文地址:https://www.cnblogs.com/kotonoha/p/13300230.html