标签:简单 tco amp size leetcode 最小 solution min int
最简单的思路: 深度遍历,得到所有的可能,找最小的结果
class Solution {
public:
void triangleGet(vector<vector<int>> triangle, vector<int> &result, int sum, int x, int y)
{
if(y==triangle.size()-1)
{
result.push_back(sum);
return;
}
triangleGet(triangle, result, sum+triangle[y+1][x],x,y+1);
if(x<triangle[y+1].size()-1)
triangleGet(triangle,result, sum+triangle[y+1][x+1],x+1, y+1);
}
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size()==0)
return 0;
vector<int> result;
triangleGet(triangle, result, triangle[0][0], 0,0);
sort(result.begin(),result.end());
return result[0];
}
};
有两个样例不能通过,时间复杂度太高。。
考虑动态规划求解:记录每一层的结果,来计算下一层。
从底往上进行计算:
到达当前位置的最小值
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
vector<vector<int>> dp(triangle.size(), vector<int>(triangle.size(),0));
for(int j=triangle[triangle.size()-1].size()-1;j>=0;j--)
{
dp[triangle.size()-1][j]=triangle[triangle.size()-1][j];
}
for(int i=triangle.size()-2;i>=0;i--)
{
for(int j=0;j<triangle[i].size();j++)
{
cout<<dp[i+1][j+1]<<" "<<dp[i+1][j]<<endl;
dp[i][j]=min(dp[i+1][j+1],dp[i+1][j])+triangle[i][j];
}
}
return dp[0][0];
}
};
标签:简单 tco amp size leetcode 最小 solution min int
原文地址:http://www.cnblogs.com/fanhaha/p/7402323.html