LeetCode 120 三角形最小路徑和

2021-10-08 02:56:04 字數 1147 閱讀 6695

-.- 這題不會做,記錄下大佬的題解(難度:中等)

給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

相鄰的結點 在這裡指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。

例如,給定三角形:

[[2],

[3,4],

[6,5,7],

[4,1,8,3]

]自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。

說明:如果你可以只使用 o(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那麼你的演算法會很加分。

求最值問題最先想到的就是動態規劃問題。動態規劃的核心問題就是窮舉。因為要求最值,肯定要把所有可行的答案窮舉出來,然後求最值。但是動態規劃有點特別,因為這類問題存在[重疊子問題],如果暴力窮舉的話,效率會及其底下,所以需要[備忘錄]或者[dp table]來優化窮舉過程,避免不必要的計算。

dp[i][j] 表示走到位置(i,j)的最小路徑總和,這裡的位置i,j指的是三角形中的第 i 行,第 j 列。

我們可以把dp[i][j]代表到達第 i 行,第 j 列的最小路徑,則狀態轉移方程表示如下:

dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]) + ********[i][j]

對於如下情況需要單獨考慮:

1)當取dp[i][0]時,此時不存在dp[i-1][j-1]的**,因此,當j=0時,狀態轉移方程如下:

dp[i][j] = dp[i-1][j] + ********[i][j]

2) 當取dp[i][i]時,此時不存在dp[i-1][i]的**,因此,當j=i時,狀態轉移方程如下:

dp[i][j] = dp[i-1][j-1] + ********[i][j]

時間複雜度是 o(n^2).

// a code block

class solutionelse if(j<********.get(i-1).size()) else}}

int mintotal = dp[********.size()-1];

for(int i=0;i<********.size();i++)

return mintotal;

}}

leetcode 120 三角形最小路徑

給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。相鄰的結點 在這裡指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 1 的兩個結點。例如,給定三角形 2 3,4 6,5,7 4,1,8,3 自頂向下的最小路徑和為 11 即,2 3 5 1 11 注意 既...

leetcode 120 三角形最小路徑和

給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。例如,給定三角形 2 3,4 6,5,7 4,1,8,3 自頂向下的最小路徑和為11 即,2 3 5 1 11 分析 從右下向左上前進。dp i j min dp i 1 j dp i 1 j i j dp i j 表示...

leetcode120 三角形最小路徑和

給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。例如,給定三角形 2 3,4 6,5,7 4,1,8,3 自頂向下的最小路徑和為 11 即,2 3 5 1 11 說明 如果你可以只使用 o n 的額外空間 n 為三角形的總行數 來解決這個問題,那麼你的演算法會很加分。...