public:
int minPathSum(vector<vector<int>>& grid) {
if(grid.size()==0) return 0;
int m=grid.size();
int n=grid[0].size();
int sum=0;
for(int j=1;j<n;j++)
grid[0][j]=grid[0][j-1]+grid[0][j];
for(int i=1;i<m;i++)
grid[i][0]=grid[i-1][0]+grid[i][0];
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
grid[i][j]=min(grid[i-1][j],grid[i][j-1])+grid[i][j];
}
}
return grid[m-1][n-1];
}
};
下面是递归方法 加备忘录法;
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if(grid.size()==0) return 0;
int m=grid.size();
int n=grid[0].size();
vector<vector<int>> ivec(m,vector<int>(n,-1));
return dfs(m-1,n-1,grid,ivec);
}
int dfs(int x,int y,vector<vector<int>>& grid, vector<vector<int>> ivec)
{
if(x<0||y<0) return 0;
return grid[x][y]=min(getupdate(x-1,y,grid,ivec),getupdate(x,y-1,grid,ivec))+grid[x][y];
}
int getupdate(int x,int y,vector<vector<int>>& grid, vector<vector<int>> &ivec)
{
if(x<0||y<0) return 0;
else if(ivec[x][y]!=-1) return ivec[x][y];
else return ivec[x][y]=dfs(x,y,grid,ivec);
}
};