思路
动态规划的问题,某一格的状态由它左侧及上侧的状态决定,即
[latex]minVal[x][y] = min( minVal[x-1][y], minVal[x][y-1] )[/latex]
当然了,第一行只由左侧决定,第一列只由上侧决定。
代码
class Solution {
public:
int min(int x, int y){
return x<y ? x : y;
}
int minPathSum(vector<vector<int>>& grid) {
const int m = grid.size();
if(m == 0)
return 0;
const int n = grid[0].size();
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(i==0 && j==0)
continue;
if(i == 0){
// min[0][i] = grid[0][i] + min[0][i-1]
grid[i][j] += grid[i][j-1];
} else if(j == 0){
grid[i][j] += grid[i-1][j];
} else {
grid[i][j] += min(grid[i-1][j], grid[i][j-1]);
}
}
}
return grid[m-1][n-1];
}
};