64 最小路徑和

2021-10-01 20:03:32 字數 1228 閱讀 8882

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

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

示例:輸入:

[ [1,3,1],

[1,5,1],

[4,2,1]

]輸出: 7

解釋: 因為路徑 1→3→1→1→1 的總和最小。

動態規劃

由於每次只能向下或者向右移動一步,所以到位置 [i][j] 的最短路徑就是當前位置的值[i][j] 與從上往下走[i-1][j] 或者從左往右走[i][j-1] 的較小值的和。

注意第一行和第一列的特殊情況。

class

solution

(object):

defminpathsum

(self, grid)

:"""

:type grid: list[list[int]]

:rtype: int

"""# 動態規劃

# grid[i][j] = grid[i][j] + min(grid[i][j-1], grid[i-1][j])

# 注意邊界條件

# 先計算邊界,計算第一行, grid[0][i] = grid[0][i-1] + grid[0][i]

for i in

range(1

,len

(grid[0]

)): grid[0]

[i]= grid[0]

[i-1

]+ grid[0]

[i]for i in

range(1

,len

(grid)):

# 計算第一列,grid[i][0] = grid[i-1][0] + grid[i][0]

grid[i][0

]= grid[i-1]

[0]+ grid[i][0

]for j in

range(1

,len

(grid[0]

)): grid[i]

[j]= grid[i]

[j]+

min(grid[i]

[j-1

], grid[i-1]

[j])

return grid[-1

][-1

]

64 最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。用動態規劃可直接解決,dp i j 代表著從 0 0 ...

64 最小路徑和

方法一 動態規劃法 二維 該問題可以通過動態規劃的方法進行求解,動態規劃最主要的是將其動態轉移方程寫出來。由於該每次只能向下和向右移動,故可以知道,對於位置m,n處,到達該點只能通過位置m,n 1處以及位置m 1,n處,故最小的路徑應為二者較小值加當前位置的值,定義dp i j 為位置i,j處的最小...

64 最小路徑和

題目描述 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。知識點 動態規劃 多階段決策最優解模型,每階段都對應一組狀態 狀態轉移方程構造方式 遞迴 備忘錄 反向遞迴 迭代遞推 正向迭代 思路和 狀態轉移方式 ...