1. 程式人生 > 其它 >Leetcode 64. 最小路徑和(中等) 動態規劃

Leetcode 64. 最小路徑和(中等) 動態規劃

labuladong講解

64. 最小路徑和(中等)

題目:

現在給你輸入一個二維陣列grid,其中的元素都是非負整數,現在你站在左上角,只能向右或者向下移動,需要到達右下角。現在請你計算,經過的路徑和最小是多少?

思路:

從左上角位置(0, 0)走到位置(i, j)的最小路徑和為dp[i][j]

狀態轉移方程當然不會變的,dp[i][j]依然取決於dp[i-1][j]dp[i][j-1]

那如果i或者j等於 0 的時候,就會出現索引越界的錯誤。

所以我們需要提前計算出dp[0][..]dp[..][0],然後讓ij的值從 1 開始迭代。

class Solution {
public:
    
int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector<vector<int>> dp(m,vector<int>(n)); // base case dp[0][0]=grid[0][0]; for(int i=1;i<m;++i) dp[i][0]=grid[i][0]+dp[i-1][0];
for(int j=1;j<n;++j) dp[0][j]=grid[0][j]+dp[0][j-1]; //狀態轉移 for(int i=1;i<m;++i){ for(int j=1;j<n;++j){ dp[i][j]=min(dp[i][j-1],dp[i-1][j])+grid[i][j]; } } return dp[m-1][n-1]; } };
聯絡方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=