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.
Subscribe to see which companies asked this question
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(), m = 0;
if(n == 0) return 0;
m = grid[0].size();
vector<int> cur(m, -1);
//dp[i][j] = min(dp[i-1][j],dp[i][j-1])+mat[i][j];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(j>=1 && cur[j]!=-1) {
cur[j] = min(cur[j-1], cur[j])+grid[i][j];
} else if(j==0) {
if(cur[j]==-1)
cur[j] = grid[i][j];
else
cur[j] = cur[j]+grid[i][j];
} else if(cur[j]==-1) {
cur[j] = cur[j-1]+grid[i][j];
}
}
}
return cur[m-1];
}
};