题目
思路
本题有点类似于杨辉三角形和不同路径问题
本题是要求解一条路径,该路径上的数字之和最小。限制条件就是每次只能向下或者向右移动一步,那么我们如何使用动态规划解决本道题呢?
我们还是设置一个dp表,dp[i]表示从左上角到本点i的最小数字总和。那么一个点i只能由它的左边或者上边走过来,那么我们就比较这两个方向的大小,选取最小的那个与i点的数字相加,用状态转移方程表示就是:dp[i]=min(dp[i-],dp[i])+nums[i].
我们需要处理的边界就是:每一行的第一列只能由它的上边转换而来。
相关代码如下:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<int> res(grid[0]);
for (int j = 0; j < n; j++) {
if (j == 0)
res[j] = res[j] ;
else {
res[j] = res[j-1] + grid[0][j];
}
}
for (int i = 1; i < m; i++) {
for (int j = 0; j < n; j++) {
if (j == 0)
res[j] = res[j] + grid[i][j];
else {
res[j] = min(res[j - 1], res[j]) + grid[i][j];
}
}
}
return res[n-1];
}
};
```