給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:輸入:
[[1,3,1],
[1,5,1],
[4,2,1]
]輸出: 7
解釋: 因為路徑 1→3→1→1→1 的總和最小。
求最值問題最先想到的就是動態規劃問題。動態規劃的核心問題就是窮舉。因為要求最值,肯定要把所有可行的答案窮舉出來,然後求最值。但是動態規劃有點特別,因為這類問題存在[重疊子問題],如果暴力窮舉的話,效率會及其底下,所以需要[備忘錄]或者[dp table]來優化窮舉過程,避免不必要的計算。
dp[i][j]
表示走到位置(i,j)
的最小路徑總和,這裡的位置i
,j
指的是三角形中的第i
行,第j
列。
我們可以把dp[i][j]
代表到達第i
行,第j
列的最小路徑,則狀態轉移方程表示如下:
dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j]
對於如下情況需要單獨考慮:
1)當取dp[i][0]
時,此時不存在dp[i][j-1]
的**,因此,當j=0
時,狀態轉移方程如下:
dp[i][j] = dp[i-1][j] + grid[i][j]
2) 當取dp[0][j]
時,此時不存在dp[i-1][j]
的**,因此,當i=0
時,狀態轉移方程如下:
dp[i][j] = dp[i][j-1] + grid[i][j]
// a code block
class solution
if(i != 0 && j == 0)
if(i != 0 && j != 0) }}
return dp[m-1][n-1];
}}
class solution
}return grid[grid.length - 1][grid[0].length - 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 由於路線只向下或者右走,所以在最上...