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.

思路

很简单的动态规划问题,用一个和grid数组一样大的数组,来存储前一次的状态。 当前元素的左侧元素和上方元素的最小路径和,再加上当前元素的值,就是当前元素的最短路径值了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int row = grid.size();
int col = 0;
if(row > 0) col = grid[0].size();
vector<vector<int>> dp(row);
for(int i = 0; i < row; i++){
dp[i].resize(col);
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
if(i == 0 && j == 0) dp[i][j] = grid[i][j];
else{
if(i == 0){
dp[i][j] = grid[i][j] + dp[i][j-1];
}
else if(j == 0){
dp[i][j] = grid[i][j] + dp[i-1][j];
}
else{
dp[i][j] = min(dp[i-1][j] + grid[i][j], dp[i][j-1] + grid[i][j]);
}
}
}
}
return dp[row-1][col-1];
}
};