有五种方法,先贴一个动归的// TODO
int minPathSum(vector<vector<int>>& grid)
{
//当grid为空时,返回0
if (grid.empty())
return 0;
//获取grid的行数和列数
int rows = grid.size();
int cols = grid[0].size();
//额外数组data,大小和grid一样
vector<vector<int>> data(rows,vector<int>(cols,grid[0][0]));
//处理data第一列
for (int i = 1; i < rows; ++i)
{
data[i][0] = data[i - 1][0] + grid[i][0];
}
//处理data第一行
for (int i = 1; i < cols; ++i)
{
data[0][i] = data[0][i - 1] + grid[0][i];
}
//处理data非第一行和第一列的元素
for (int i = 1; i < rows; ++i)
{
for (int j = 1; j < cols; ++j)
{
data[i][j] = min(data[i][j - 1], data[i - 1][j]) + grid[i][j];
}
}
//返回最短路径值
return data[rows - 1][cols - 1];
}
int minPathSum(vector<vector&