數字三角形

問題描述

給定一個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。

樣例

比如,給出下列數字三角形:

[
     [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];
        }
    }
};

感想

主要考慮情況要全面

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