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.
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
方法:DP
易错点:
- m在这里必须是纵坐标,n是横坐标,和习惯不一样,后面的顺序不要记反。
- dp比grid的坐标多1
code
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
dp[1][1] = grid[0][0];
for (int x = 1; x < n + 1; x++){
for (int y = 1; y < m + 1; y ++){
if (x == 1 && y == 1){
continue;
}
else {
dp[y][x] = min(dp[y - 1][x], dp[y][x - 1]) + grid[y - 1][x - 1];
}
}
}
return dp[m][n];
}
};