120 三角形最小路径和

163 阅读1分钟

LeetCode 120 三角形最小路径和

题目

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
] 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

  • 说明

    如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

我的代码

class Solution {
public:
    int minNum(int a, int b){
        return a > b ? b : a;
    }
    int minimumTotal(vector<vector<int>>& triangle) {
        int i=0,j=0;
        int a=0,b=0;
        vector<int> triang(triangle.size(),0);
        triang[0] = triangle[0][0];
        for(i=1;i<triangle.size();i++){
            triang[i] = triang[i-1] + triangle[i][i];
            for(j=triangle[i].size()-2; j>=1; j--){
                triang[j] = minNum(triang[j], triang[j-1]) + triangle[i][j];
            }
            triang[0] += triangle[i][0];
            
            
        }
        int mini = 100000;
        for(i=0;i<triang.size();i++){
            if(triang[i] < mini){
                mini = triang[i];
            }
        }
        return mini;
    }
};

解题思路

  • triangle为给定的储存三角形的二维vector,各行长度为1,3,5,7...2n-1
  • triang为一维数组,存储当前"走到"每一行的状态
  • triang初始化为第一行的状态,而后每走一行,根据triang与当前行更新triang
  • 每一行从后往前更新triang数组。

minNum函数

用于返回两数中小值