力扣 题目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 }