動態規劃之64 最小路徑和(Medium)

2021-10-19 08:56:29 字數 1179 閱讀 3912

題目描述:

給定乙個包含非負整數的 m x n 網格 grid ,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

一句話思路:

問題可以看成是求全域性最優解,即從左上角出發到右下角經過的最小路徑和。

轉換成區域性最優解即為從左上角到當前位置的最小路徑和。

**:

class

solution

:def

minpathsum

(self, grid: list[list[

int]])

->

int:

m =len(grid)

n =len(grid[0]

) dp =[[

0]* n for _ in

range

(m)]

#dp= [0] * (m*n)

for i in

range

(m):

for j in

range

(n):

'''上下都是邊界'''

if i ==

0and j ==

0:dp[i]

[j]= grid[i]

[j]#'''上是邊界,第一行,只能從左邊到達'''

elif i ==

0and j !=

0:dp[i]

[j]= dp[i]

[j-1

]+ grid[i]

[j]#'''左是邊界,第一列,只能從上面到達'''

elif j ==

0and i !=

0:dp[i]

[j]= dp[i-1]

[j]+ grid[i]

[j]#'''都不是邊界'''

else

:dp[i]

[j]=

min(dp[i]

[j-1

],dp[i-1]

[j])

+ grid[i]

[j]return dp[m-1]

[n-1

]

64 最小路徑和 動態規劃

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。從左上角開始,到右下角 思路 遍歷每個位置,記錄達到該...

64 最小路徑和 經典動態規劃題

難度 中等 據說這個月是動態規劃月,真的好多動態規劃題啊 題目描述 解題思路 動態規劃,先定義狀態,就是到這乙個格仔需要經過路徑最小的總和 因為只能往下或者往右走,所以可以先初始化第一行和第一列,這兩個只能由其起點來 然後對於其它位置的節點,要麼是從上面到這裡,要麼是從左邊到這裡,每次都選擇最小的 ...

動態規劃 最小路徑和

給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。你在同一時間只能向下或者向右移動一步 樣例1 1 3 1 1 5 1 4 2 1 輸出 7 樣例2 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 輸出 12 計算到達當前位置路徑,是在上一步的基礎上...