数字三角形

问题描述

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

样例

比如,给出下列数字三角形:

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

解题思路

这个题为了考虑空间复杂度,要从下向上考虑

代码

class Solution {
public:
    /*
     * @param triangle: a list of lists of integers
     * @return: An integer, minimum path sum
     */
    
    int minimumTotal(vector<vector<int>> &triangle) {
        // write your code here
        int n=triangle.size();
        if(n==1)  return triangle[0][0];
        else{
        int a[n][n];
        for(int i=0;i<n;i++)
        {   
            a[n-1][i]=triangle[n-1][i];
        }
        for(int i=n-1;i>-1;i--)
        {
            for(int j=0;j<i+1;j++)
            {  
                a[i][j]=triangle[i][j];
                if(i<n-1){
              if(a[i+1][j]<a[i+1][j+1])
              a[i][j]+=a[i+1][j];
              else
               a[i][j]+=a[i+1][j+1];
                }
            } 
        }
        return a[0][0];
        }
    }
};

感想

主要考虑情况要全面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章