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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m = grid.size();
if(m==0) return 0;
int n = grid[0].size();
vector<vector<int> > minSum (m,(vector<int>)n);
for(int i=n-1;i>=0;i--)
{
minSum[m-1][i] = (i==n-1)? grid[m-1][n-1]:minSum[m-1][i+1]+grid[m-1][i];
}
for(int i=m-1;i>=0;i--)
{
minSum[i][n-1] = (i==m-1)? grid[m-1][n-1]:minSum[i+1][n-1]+grid[i][n-1];
}
for(int i=m-2;i>=0;i--)
{
for(int j=n-2;j>=0;j--)
{
minSum[i][j] = grid[i][j] + min(minSum[i+1][j],minSum[i][j+1]);
}
}
return minSum[0][0];
}
};
2692

被折叠的 条评论
为什么被折叠?



