64. Minimum Path Sum
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
解析:還是一到動態規劃,矩陣dp第一行和第一列需要單獨處理:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0 ){return 0;}
int n = grid[0].size();
if(n == 0 ) {return 0;}
vector<vector<int>> res(m,vector<int>(n));
//diyilie
res[0][0] = grid[0][0];
for(int i =1;i<n;i++){
res[0][i] = grid[0][i] + res[0][i-1];
}
//diyihang
for(int i =1;i<m;i++){
res[i][0] = grid[i][0] + res[i-1][0];
}
for(int i = 1 ; i<m;i++){
for(int j = 1;j<n;j++){
res[i][j] = grid[i][j] + min(res[i][j-1],res[i-1][j]);
}
}
return res[m-1][n-1];
}
};