力扣HOT100之多维动态规划:64. 最小路径和
这道题和上一道题62.不同路径套路很像,思路也比较简单,用二维dp
数组做就可以了。直接上动规五部曲:
1.确定dp[i][j]
的含义:从起点到位置为[i][j]
处的最小路径和
2.确定递推公式 dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
3.dp数组初始化 dp[0][j] = dp[0][j - 1] + grid[0][j]; dp[i][0] = dp[i - 1][0] + grid[i][0];
4.确定遍历顺序:从左往右,从上往下遍历
5.打印数组(省略)
思路比较简单,这里直接给代码了。
class Solution {
public:int minPathSum(vector<vector<int>>& grid) {//1.确定dp[i][j]的含义:从起点到位置为[i][j]处的最小路径和//2.确定递推公式 dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];//3.dp数组初始化 dp[0][j] = dp[0][j - 1] + grid[0][j]; dp[i][0] = dp[i - 1][0] + grid[i][0];//4.确定遍历顺序:从左往右,从上往下遍历//5.打印数组(省略)int m = grid.size(); //m行int n = grid[0].size(); //n列vector<vector<int>> dp(m, vector<int>(n));//初始化dp[0][0] = grid[0][0];for(int i = 1; i < m; i++)dp[i][0] = dp[i - 1][0] + grid[i][0];for(int j = 1; j < n; j++)dp[0][j] = dp[0][j - 1] + grid[0][j];for(int i = 1; i < m; i++){for(int j = 1; j < n; j++)dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}return dp[m - 1][n - 1];}
};