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.
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int size = grid.size();
if (size < 1) {
return 0;
}
for (int i = 0; i < size; ++i) {
for (int j = 0; j < grid[i].size(); ++j) {
if (i == 0 && j >0) {
grid[i][j] += grid[i][j-1];
}
if (i > 0 && j == 0) {
grid[i][j] += grid[i-1][j];
}
if (i >0 && j > 0) {
grid[i][j] += grid[i-1][j] < grid[i][j-1] ? grid[i-1][j] : grid[i][j-1];
}
}
}
return grid[size - 1][grid[0].size() - 1];
}
};