目录
1.分析
设F(i,j)是到达下标(i,j)的最小路径。
arr表示三角形数组。
起始状态:F(0,0)=arr[0][0];
此时有三种情况(三种转移状态):
1.1当j == 0时
F(i,j)=F(i-1,j)+arr[i][j];
1.2当j == i时
F(i,j)=F(i-1,j-1)+arr[i][j];
1.3一般情况
F(i,j)=min(F(i-1,j-1),F(i-1,j))+arr[i][j];
2.题解
知道每个下标的最小路径的情况下,只需要从最后一行中找到最小的那个数即是最短路径。
代码:
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int row=triangle.size();
for(int i=1;i<row;i++)
{
for(int j=0;j<=i;j++)
{
if(j == 0)
triangle[i][j]=triangle[i-1][j]+triangle[i][j];
else if(j == i)
triangle[i][j]=triangle[i-1][j-1]+triangle[i][j];
else
triangle[i][j]=min(triangle[i-1][j-1],triangle[i-1][j])+triangle[i][j];
}
}
int minmum=triangle[row-1][0];
for(int i=0;i<row;i++)
{
if(triangle[row-1][i] < minmum)
minmum=triangle[row-1][i];
}
return minmum;
}
};