class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size()==1)
return triangle[0][0];
int maxsize=triangle[triangle.size()-1].size();
vector<int> lastvalue(maxsize,0);
vector<int> curvalue(maxsize,0);//curvalue[i]代表从顶部到triangle[currow,i] 的最少步数
lastvalue[0]=triangle[0][0];//初始化值
for(int i=1;i<triangle.size();i++)
{
for(int j=0;j<=i;j++)//利用lastvalue更新curvalue
{
if(j==0)//最左边
{
curvalue[j]=lastvalue[j]+triangle[i][j];
}
else if(j==i)//最右边
{
curvalue[j]=lastvalue[j-1]+triangle[i][j];
}
else
{
curvalue[j]=triangle[i][j]+min(lastvalue[j-1],lastvalue[j]);
}
}
for(int j=0;j<=i;j++)//将curvalue的值赋给lastvalue
{
lastvalue[j]=curvalue[j];
}
}
int minsteps=INT_MAX;
for(int j=0;j<maxsize;j++)//寻找最小的步数
{
if(minsteps>curvalue[j])
minsteps=curvalue[j];
}
return minsteps;
}
};
120. Triangle
最新推荐文章于 2022-05-19 05:24:26 发布