Leetcode 120 三角形最小路径和 (C++题解)

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

例如,给定三角形:

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

说明:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:考点是递归和动态规划。直接递归会超时,使用记忆化搜索+自顶向下或者dp+自底向上方法(代码中注释方法)。

class Solution {
public:
    int P[1000][1000];
     int Search(int level,int index,vector>& triangle)
    {
        if(P[level][index]!=NULL) return P[level][index];
        P[level][index] = triangle[level][index];
        if(level == triangle.size()-1)
        {   
            
            return P[level][index];
        }
        else
        {
            int Left = Search(level+1,index,triangle);
            int Right = Search(level+1,index+1,triangle);
            return P[level][index] +=  min(Left,Right);
        }
    }
     
    int minimumTotal(vector>& triangle) {
        int H = triangle.size();
        if(H==0) return 0;
        // for(int i=H-2;i>=0;i--)
        // {
        //     for(int j=0; j

 

你可能感兴趣的:(Leetcode题解)