Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Difficulty:Medium
int minPathSum(vector<vector<int> >& grid) {
int m = grid[0].size();
int n = grid.size();
if(m==1&&n==1)
return grid[n-1][m-1];
for(int i = 1;i<n;i++)
grid[i][0] = grid[i-1][0]+grid[i][0];
for(int i = 1;i<m;i++)
grid[0][i] = grid[0][i-1]+grid[0][i];
if(m==1)
return grid[n-1][0];
if(n==1)
return grid[0][m-1];
for(int i = 1;i<m;i++)
for(int j = 1;j<n;j++)
{
grid[j][i] = grid[j-1][i]<grid[j][i-1]?grid[j-1][i]+grid[j][i]:grid[j][i-1]+grid[j][i];
}
return grid[n-1][m-1];
}