64 最小路徑和

2021-10-19 07:37:31 字數 1846 閱讀 7670

建立二維陣列 \textitdp,與原始網格的大小相同,\textit

[i][j]dp[i]

[j] 表示從左上角出發到 (i,j)

(i,j) 位置的最小路徑和。顯然,\textit[0

][0]

=\textit[0

][0]dp[0]

[0]=grid[0]

[0]。對於 \textitdp 中的其餘元素,通過以下狀態轉移方程計算元素值。

當 i>0i>

0 且 j=0j=

0 時,\textit

[i][0]

=\textit

[i-1][

0]+\textit

[i][

0]dp[i][0

]=dp[i−1][

0]+grid[i][0

]。當 i=0i=

0 且 j>

0j>

0 時,\textit[0

][j]

=\textit[0

][j-1]

+\textit[0

][j]dp[0]

[j]=dp[0]

[j−1

]+grid[0]

[j]。

當 i>0i>

0 且 j>

0j>

0 時,\textit

[i][j]

=\min

(\textit

[i-1

][j]

,\textit

[i][j-1]

)+\textit

[i][j]dp[i]

[j]=

min(dp[i−1

][j]

,dp[i]

[j−1])

+grid[i]

[j]。

class

solution

:def

minpathsum

(self, grid: list[list[

int]])

->

int:

ifnot grid or

not grid[0]

:return

0

rows, columns =

len(grid)

,len

(grid[0]

) dp =[[

0]* columns for _ in

range

(rows)

] dp[0]

[0]= grid[0]

[0]for i in

range(1

, rows)

: dp[i][0

]= dp[i -1]

[0]+ grid[i][0

]for j in

range(1

, columns)

: dp[0]

[j]= dp[0]

[j -1]

+ grid[0]

[j]for i in

range(1

, rows)

:for j in

range(1

, columns)

: dp[i]

[j]=

min(dp[i -1]

[j], dp[i]

[j -1]

)+ grid[i]

[j]return dp[rows -1]

[columns -

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 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。知識點 動態規劃 多階段決策最優解模型,每階段都對應一組狀態 狀態轉移方程構造方式 遞迴 備忘錄 反向遞迴 迭代遞推 正向迭代 思路和 狀態轉移方式 ...