/*动态规划法。
用dp[i][j]表示从左上角到grid[i][j]表示的元素的最小距离。则有
dp[i][j] = min{dp[i][j-1]+grid[i][j], dp[i-1][j]+grid[i][j]}。
下面在实现过程中采用滚动数组的方法将空间复杂度降到o(n).*/
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if(grid.empty()) return 0;
vector<int> dp(grid[0].size(), 0);
dp[0] = grid[0][0];
for(int i = 1; i < grid[0].size(); ++i) dp[i] = dp[i-1]+grid[0][i];
for(int i = 1; i < grid.size(); ++i){
for(int j = 0; j < grid[i].size(); ++j){
if(j == 0) dp[j] = dp[j]+grid[i][j];
else dp[j] = min(dp[j-1]+grid[i][j], dp[j]+grid[i][j]);
}
}
return dp[grid[0].size()-1];
}
};LeetCode之Minimum Path Sum
最新推荐文章于 2024-10-10 04:34:22 发布
本文介绍了一种使用动态规划解决二维网格中从左上角到右下角的最小路径和问题的方法。通过定义dp数组来记录到达每个位置的最小路径和,并采用滚动数组优化空间复杂度。
2982

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



