问题描述
给定一个非负整数填充的m*n的二维数组, 现在要从二维数组的左上角走到右下角, 请找出路径上的所有数字之和的最小路径
注意: 每次只能向下或向右移动
用F(i, j)表示从(0, 0)到(i, j)的的最短路径
F(i, j) = min(F(i, j - 1), F(i - 1, j)) + (i, j)
注意初始化: 第0行, 第0列
F(0, i) = F(0, i - 1) + (0, i)
F(i, 0) = F(i - 1, 0) + (i, 0)
代码如下
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
int row = grid.size();
int col = grid[0].size();
for (int i = 1; i < col; ++i)
{
grid[0][i] += grid[0][i - 1];
}
for (int j = 1; j < row; ++j)
{
grid[j][0] += grid[j - 1][0];
}
for (int i = 1; i < row; ++i)
{
for (int j = 1; j < col; ++j)
{
grid[i][j] = min(grid[i][j - 1], grid[i - 1][j]) + grid[i][j];
}
}
return grid[row - 1][col - 1];
}
};