/*动态规划法。
用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 发布