leetcode 64 最小路徑和

2021-10-07 17:58:14 字數 1209 閱讀 8045

題幹:

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

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

示例:

輸入:[[1

,3,1

],[1

,5,1

],[4

,2,1

]]輸出:7

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

解題思路:

| 1 | 2 |

| 3 | 4 |

以該矩陣為例,若想知道該矩陣到4的最小路徑,其實只需要對比2,3哪個更小即可,選擇小的那邊,因此可以使用動態規劃。

動態規劃的三步:

1.狀態定義:

假設dp[ i ][ j ]表示到達矩陣(i, j)處,最短路徑的值。

2.狀態轉移方程:

對於(i, j)他的路徑只能從(i - 1, j)和(i, j - 1)兩個地方到來。因此,狀態轉移方程為:

dp[ i ][ j ] = max(dp[ i - 1 ][ j ], dp[ i ][ j - 1]) + grid[ i ][ j ]

3.邊界條件:

i == 0 && j == 0時,dp[ 0 ][ 0 ] = grid[ 0 ][ 0 ];

i == 0 && j > 0時,dp[ i ][ j ] = dp[ 0 ][ j - 1] + grid[ i ][ j ] ;

i > 0 && j == 0時,dp[ i ][ j ] = dp[ i - 1 ][ 0 ] + grid[ i ][ j ];

**實現:

int

minpathsum

(int

** grid,

int gridsize,

int* gridcolsize)

dp[0]

[0]= grid[0]

[0];

for(i =

1; i < gridsize; i++

)for

(j =

1; j <

(* gridcolsize)

; j++

)for

(i =

1; i < gridsize; i++)}

return dp[i -1]

[j -1]

;}

LeetCode 64 最小路徑和

題目描述 提示幫助 提交記錄 社群討論 閱讀解答 隨機一題 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和...

LeetCode 64 最小路徑和

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

LeetCode 64 最小路徑和

題目 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。解題思路 1 由於路線只向下或者右走,所以在最上...