LeetCode 120 三角形最小路径(方法二)

class Solution {
public:
    //int dp[1000][1000];
    int minimumTotal(vector<vector<int>>& triangle) {
         //基本思想,动态规划,思路自顶向下,或自底向上,
         //再考虑自底向上,用dp[i][j]二维数组维护,到达每个节点的最短路径
         //基本动态转移方程triangle[i][j]=triangle[i][j]+min(dp[i+1][j],triangle[i+1][j+1])
        //即从倒数第二行开始,将每个行的数据改为当前行到下一行的最短距离,一直到三角形顶点总的来说就说就是
        //自底向上的dp思想
        int len=triangle.size();
        for(int i=len-2;i>=0;--i){
            for(int j=0;j<triangle[i].size();++j)
            triangle[i][j]=min(triangle[i+1][j],triangle[i+1][j+1])+triangle[i][j];
        }
        return triangle[0][0];
    }

};

通过与方法一的比较我们能明显的看出此方法的优点,无论是在时间还是空间上,感觉解决动态规划一类问题的关键是,如何确定动态转移方程,实现由实际问题向数学问题的转变。感觉就是要多练吧,增加思维的广度

原文地址:https://www.cnblogs.com/zzw-/p/13259963.html