1. 程式人生 > 其它 >力扣 題目64- 最小路徑和

力扣 題目64- 最小路徑和

題目

題解

力扣 題目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) {
8 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 }
View Code