题目
题解
解法一 二维动态规划
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int row = grid.size();
int col = grid[0].size();
vector<vector<int>> dp(row, vector<int>(col, 0));
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
if(i == 0 && j == 0)
{
dp[i][j] = grid[i][j];
}
else if(i == 0)
{
dp[i][j] = grid[i][j] + dp[i][j - 1];
}
else if(j == 0)
{
dp[i][j] = grid[i][j] + dp[i - 1][j];
}
else
{
dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[row - 1][col - 1];
}
};
解法二——一维动态规划
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int row = grid.size();
int col = grid[0].size();
int dp[col];
for(int i = 0;i < row; i++)
{
for(int j = 0; j < col; j++)
{
if(i == 0 && j == 0)
{
dp[j] = grid[i][j];
}
else if(i == 0)
{
dp[j] = grid[i][j] + dp[j - 1];
}
else if(j == 0)
{
dp[j] = grid[i][j] + dp[j];
}
else
{
dp[j] = grid[i][j] + min(dp[j], dp[j - 1]);
}
}
}
return dp[col - 1];
}
};
两个解法思路类似,但是使用一维动态规划能大幅压缩空间复杂度。