题意
一个 n∗m 的地图,每个点有一个权值,求从左上角到右下角的最小路径权值和.
思路
经典的 DP 问题, dp[i][j] 表示到达点 (i,j) 的最小权值和,同样的到达一个点 (i,j) 只能从点 (i−1,j) 或者点 (i,j−1) ,那么可以得出 dp[i][j]=dp[i][j]+min(dp[i−1][j],dp[i][j−1]) .
代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0) return 0;
int n = grid[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(i == j && i == 0) continue;
if(i == 0){
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][j - 1], grid[i - 1][j]);
}
}
}
return grid[m - 1][n - 1];
}
};