leetcode64
Minimum Path Sum
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.
这个题目其实我一开始也是没有头绪的,也是看了别人的方法。现在总结下心得。由于只能向右或者向下,所以第一行和第一列的每个格子所经过之后的数字和是唯一的,所以先使用两个单循环遍历第一行和第一列,算出每个行列上每个格子的唯一可能的数字和数。之后使用双层循环从第二行,第二列的格子开始,到达这个格子的最小数字总和为上方或者左边的最小值加上自己本身格子中的值。遍历之后,返回最后一个格子中的值,即为路径最小的和。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
vector<vector<int> > temp(grid);
for (int i = 1; i < grid.size(); ++i)
{
temp[i][0] += temp[i-1][0];
}
for (int i = 1; i < grid[0].size(); ++i)
{
temp[0][i] += temp[0][i-1];
}
for (int i =1; i < grid.size(); ++i)
for (int j = 1; j < grid[0].size(); ++j)
{
temp[i][j] = min(temp[i-1][j], temp[i][j-1]) + temp[i][j];
}
return temp[grid.size()-1][grid[0].size()-1];
}
};