题目:
我的代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
int res[n][m];
res[0][0] = grid[0][0];
for(int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int x = i-1, y = j-1;
if (x >= 0 && y >= 0) {
res[i][j] = grid[i][j] + min(res[x][j], res[i][y]);
} else if (x >= 0) {
res[i][j] = grid[i][j] + res[x][j];
} else if (y >= 0) {
res[i][j] = grid[i][j] + res[i][y];
}
}
}
return res[n-1][m-1];
}
};
这道题我的思路是建立一个与grid对应的二维数组,然后把从gird[0][0]到每个点的最小和都求出并保存,即遍历grid,如果一个点左边或者上边有点,该点的最小和为点本身的值加上左边值和上边值中小的那个,最后返回点[n-1][m-1]的值即为结果。