Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 =
11).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
===================================================================
题目链接:https://leetcode.com/problems/triangle/
题目大意:求三角形从上往下的最小和。
思路:动态规划,从下往上找。
1、刚开始dp = triangle[n-1] 。
2、逐渐往上走,则dp[j] = triangle[i][j] + min ( dp[j] , dp[j+1] ) 。
3、最后dp[0]就是结果。
参考代码:
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n = triangle.size() ;
if ( n == 0 )
return 0 ;
vector <int> dp = triangle[n-1] ;
for ( int i = n - 2 ; i >= 0 ; i -- )
{
for ( int j = 0 ; j <= i ; j ++ )
{
dp[j] = triangle[i][j] + min ( dp[j] , dp[j+1] ) ;
}
}
return dp[0] ;
}
};