題幹:
給定乙個包含非負整數的 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 由於路線只向下或者右走,所以在最上...