DP就完事了,就是需要注意边界条件
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size(),n=grid[0].size();
int dp [m+1][n+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(i==1||j==1)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
else
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
return dp[m][n];
}
};
再优化下空间复杂度
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size(),n=grid[0].size();
int dp [n+1];
dp[0]=0;
for(int i=1;i<=n;++i) dp[i]=dp[i-1]+grid[0][i-1];
for(int i=2;i<=m;++i){
for(int j=1;j<=n;++j){
if(j==1) dp[j]=dp[j]+grid[i-1][j-1];
else dp[j]=min(dp[j],dp[j-1])+grid[i-1][j-1];
}
}
return dp[n];
}
};