三角形最小路径和

三角形最小路径和_第1张图片

算法思路:

1.设置一个二维数组,最优值三角形dp[][],并初始化数组元素为0。dp[i][j]代表了从底向上递推时,走到三角形第i行第j列的最优解

2.从三角形的底面向三角形上方进行动态规划:

a.动态规划边界条件:底面上的最优值即为数字三角形的最后一层

b.利用i循环,从倒数第二层递推至第一层,对于每层的各列,进行动态规划递推:

第i行,第j列的最优解为dp[i][j],可到达(i,j)的两个位置的最优解为dp[i+1][j],dp[i+1][j+1]。

dp[i][j] = min( dp[i+1][j], dp[i+1][j+1] ) + triangle[i][j]

3.返回dp[0][0]


class Solution {
public:
    int minimumTotal(vector>& triangle) {
        if(triangle.size() == 0)
            return 0;
        
        vector > dp;
        //初始化dp数组为0,维数和三角形数组一样
        for(int i = 0;i());
            for(int j = 0;j =0;--i)
        {
            for(int j = 0;j

你可能感兴趣的:(LeetCode)