力扣 題目64- 最小路徑和
阿新 • • 發佈:2022-05-29
題目
題解
在力扣 題目62- 不同路徑和力扣 題目63- 不同路徑II中採用了取每個方塊的的左塊次數和上塊次數 那麼我們這次可以改造
原本儲存次數的地方 這次應當放入到該位置的最小值 這樣最後一格只要比較一下大小加上自己即可
別忘了 上邊和左邊特殊處理
程式碼
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 class Solution { 6 public: 7 int minPathSum(vector<vector<int>>& grid) {View Code8 int m = grid.size(); 9 int n = grid[0].size(); 10 vector<vector<int>> dp(m, vector<int>(n, 0)); 11 dp[0][0] = grid[0][0]; 12 for (int i = 1; i < m; i++) { 13 dp[i][0] = dp[i-1][0]+ grid[i][0]; 14 // cout << "dp[" <<i<<"][0]="<<dp[i][0] << endl;15 } 16 for (int j = 1; j < n; j++) { 17 dp[0][j] = dp[0][j-1] + grid[0][j]; 18 //cout << "dp[0]["<<j<<"] = " << dp[0][j] << endl; 19 } 20 21 for (int i = 1; i < m; i++) { 22 for (int j = 1; j < n; j++) {23 dp[i][j] = min(dp[i - 1][j] , dp[i][j - 1])+ grid[i][j]; 24 //cout << "dp["<<i<<"]["<<j<<"] = " << dp[i][j] << endl; 25 } 26 } 27 return dp[m - 1][n - 1]; 28 } 29 }; 30 int main() { 31 Solution sol; 32 vector<vector<int>>grid = { {1}}; 33 int result= sol.minPathSum(grid); 34 cout << result << endl; 35 36 }