leetcode-64-minimum path sum

题目

给定m*n矩阵。存储当下节点的权重,求解从左上角到达右下角,所经过的路径的最小权重

分析

DP思想实现,dp[i][j]存储从[0][0]到达[i][j]所经历的路径的最小权重和
具体思路见代码注释处

C++代码实现

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
30
31
32

*Use DP
* dp[i][j] from [0][0] to [i][j], The min sum of all numbers along this path.
* dp[i][j] = grid[i][j] if i == 0 && j == 0
* = grid[i][j-1] + grid[i][j] if j == 0 && i != 0
* = grid[i-1][j] + grid[i][j] if i == 0 && j != 0
* = min(dp[i-1][j] + dp[i][j-1]) + grid[i][j] if i != 0 && j != 0
*/

class Solution {
public:
int (vector<vector<int>>& grid) {
vector<vector<int>> res = grid;
int min_num = 0;
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[i].size(); j++){
if(i == 0 && j == 0){
min_num = res[i][j] = grid[i][j];
}
else if(i == 0){
min_num = res[i][j] = res[i][j-1] + grid[i][j];
}
else if(j == 0){
min_num = res[i][j] = res[i-1][j] + grid[i][j];
}
else{
min_num = res[i][j] = min(res[i-1][j], res[i][j-1]) + grid[i][j];
}
}
}
return min_num;
}
};