解题思路:
- 本题要求求解出最短路径,而每一次的选择只能向下或者向右走,所以每一个位置都和他上面和左面的路径大小相关,采用备忘录的迭代思想(动态规划)来解决此类问题
- 注意
1.备忘录初始化的一些数据
2.转移状态函数的设计
class Solution {
public:
// 动态规划
int minPathSum(vector<vector<int>>& grid) {
int h = grid.size();
int w = grid[0].size();
// 定义二维备忘录
vector<vector<int>>dp = grid;
// 初始化边缘(第0行的数字)
for(int i = 1;i<h;++i){
dp[i][0] = dp[i-1][0]+dp[i][0];
}
// 初始化边缘(第0列的数字)
for(int j = 1;j<w;++j){
dp[0][j] = dp[0][j-1]+dp[0][j];
}
// 状态遍历
for(int i = 1;i<h;++i){
for(int j = 1;j<w;++j){
dp[i][j] = min(dp[i][j-1]+dp[i][j],dp[i-1][j]+dp[i][j]);
}
}
return dp[h-1][w-1];
}
};