題目描述:
給定乙個包含非負整數的 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 計算到達當前位置路徑,是在上一步的基礎上...