动态规划经典题型,很明显看得出来递推公式为:
vec[i][j] = tmp + grid[i][j](tmp = (vec[i - 1][j] > vec[i][j - 1]) ? vec[i][j - 1] : vec[i - 1][j]);
这题只需要开一个二维数组来保存当前位置的路径和即可,不过要注意一下边界值:
第一行:vec[i][j] = grid[i][j] + vec[i - 1][j];
第一列:vec[i][j] = grid[i][j] + vec[i][j - 1];
核心代码如上,其他就是简单赋值、循环了。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if (!grid.size())
return 0;
int m = grid.size();
int n = grid[0].size();
vector<vector<int>> vec(m, vector<int>(n, 0));
vec[0][0] = grid[0][0];
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (i == 1)
vec[i][j] = grid[i][j] + vec[i - 1][j];
else if (j == 1)
vec[i][j] = grid[i][j] + vec[i][j - 1];
else {
int tmp = (vec[i - 1][j] > vec[i][j - 1]) ? vec[i][j - 1] : vec[i - 1][j];
vec[i][j] = tmp + grid[i][j];
}
}
}
return vec[m - 1][n - 1];
}
};
本文介绍了一道经典的动态规划问题——求二维网格从左上角到右下角的最小路径和。给出了详细的递推公式及核心代码实现,并讨论了边界条件的处理。
2713

被折叠的 条评论
为什么被折叠?



