您的位置:首页 > 其它

120. Triangle LeetCode

2016-03-07 22:30 429 查看
题意:给出一个数字三角形,求一条从三角形头部到底部的路径,是的路径上的数字加和最小。

题解:dp,dp[i][j] 表示从0,0走到i行j列的时候最小数字和。转移方程:

dp[i][j] = min(dp[i - 1][j],dp[i - 1][j - 1]) + triangle[i][j].省空间的话可以不用额外开dp数组,直接用triangle来dp就可以。

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n = triangle.size();
for(int i = 1; i < n; i++)
{
int m = triangle[i].size();
triangle[i][0] += triangle[i - 1][0];
triangle[i][m - 1] += triangle[i - 1][m - 2];
for(int j = 1; j < i; j++)
triangle[i][j] += min(triangle[i - 1][j - 1],triangle[i - 1][j]);
}
int ans = triangle[n - 1][0];
for(int i = 0; i < n; i++)
ans = min(ans,triangle[n - 1][i]);
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode dp