Leetcode-三角形最小路徑和

題目描述

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。
相鄰的結點 在這裏指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。
例如,給定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和爲 11(即,2 + 3 + 5 + 1 = 11)。
說明:
如果你可以只使用 O(n) 的額外空間(n 爲三角形的總行數)來解決這個問題,那麼你的算法會很加分。

解題思路

從下往上遍歷一遍,每個元素取下一行兩個元素中的小值,這個思路真是太棒了,簡直完美!
1.先鎖定到倒數第二行最右邊的點,從這裏開始計算
2.計算每個店到低端的最小值,覆蓋掉triangle中的原值,這一步非常重要。接下來triangle中的值就代表距離低端最近的距離。

func minimumTotal(triangle [][]int) int {
    tLen:=len(triangle)
    if tLen<=0{
        return 0
    }

    for i:=tLen-2;i>=0;i--{
        for j:=len(triangle[i])-1;j>=0;j--{
            triangle[i][j]=triangle[i][j]+min(triangle[i+1][j],triangle[i+1][j+1])
        }
    }

    return triangle[0][0]
}

func min(a,b int) int{
    if a>b{
        return b
    }
    return a
}

相互學習,共同進步。

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