DP + 滚动数组,注意首行和首列特殊处理。
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
const int rows = grid.size();
if(rows == 0) return 0;
const int cols = grid[0].size();
vector<int> sum(cols, 0);
for(int i=0; i<rows; i++)
{
sum[0] = sum[0] + grid[i][0];
for(int j=1; j<cols; j++)
{
if(i == 0)
sum[j] = sum[j-1] + grid[i][j];
else
sum[j] = min(sum[j], sum[j-1]) + grid[i][j];
}
}
return sum[cols-1];
}
};