Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)

2025每日刷题(219)

Leetcode---120. 三角形最小路径和

实现代码

cpp 复制代码
class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        const int m = triangle.size();
        vector<int> dp(m + 1, 0);

        // dp[0] = 2
        // dp[0] = 5 dp[1] = 6
        // dp[0] = 11 dp[1] = triangle[i][j] + min(dp[j - 1], dp[j])
        for(int i = 0; i < m; ++i) {
            vector<int> tmp(dp);
            for(int j = 0; j <= i; ++j) {
                if(j == 0 && i == 0) {
                    tmp[j] = triangle[i][j];
                } else if(j == 0) {
                    tmp[j] += triangle[i][j];
                } else if(j == i) {
                    tmp[j] = triangle[i][j] + dp[j - 1];
                } else {
                    tmp[j] = triangle[i][j] + min(dp[j - 1], dp[j]);
                }
            }
            dp = tmp;
        }
        return *min_element(dp.begin(), dp.begin() + m);
    }
};

运行结果

逆向实现代码

cpp 复制代码
class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        for(int i = triangle.size() - 2; i >= 0; --i) {
            for(int j = 0; j <= i; ++j) {
                triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]);
            }
        }
        return triangle[0][0];
    }
};

运行结果

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!