LeetCode 64. Minimum Path Sum 动态规划 C++实现
题目链接
题目大意
给定网格,每个格子中都有一个权值,求解从左上角格子到右下角格子的最短路径,位于每个格子中只能向下或向右移动
算法思路
根据题意,基于动态规划思想,初始化第一列和第一行,除第一列和第一行的每个格子的状态为其上一个格子和其左边一个格子中的较小值,状态转移方程为grid[i][j] += min(grid[i][j - 1], grid[i - 1][j]);
,迭代结束后,grid[grid.size() - 1][grid[0].size() - 1]
即为答案
AC代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
for (int i = 1; i < grid.size(); i++) {
grid[i][0] += grid[i - 1][0];
}
for (int i = 1; i < grid[0].size(); i++) {
grid[0][i] += grid[0][i - 1];
}
for (int i = 1; i < grid.size(); i++) {
for (int j = 1; j < grid[i].size(); j++) {
grid[i][j] += min(grid[i][j - 1], grid[i - 1][j]);
}
}
return grid[grid.size() - 1][grid[0].size() - 1];
}
};
样例输入
[
[1,3,1],
[1,5,1],
[4,2,1]
]
样例输出
7
鸣谢
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!