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.
Subscribe to see which companies asked this question.
基本动态规划:设置矩阵存储当前最小值
第一次尝试nm的矩阵使用(n+1)(m+1)矩阵赋值
第0行或0列全部为0
第1行或第1列横向/纵向相加
其余min(num + sum(i-1,j), num+sum(i,j-1))
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int raw = grid.size();
if(raw == 0)
return 0;
int col = grid[0].size();
//cout << raw << " " << col;
int sum[raw + 1][col + 1] = {0};
int i,j;
for(i = 0 ; i <= raw ; i ++)
{
for (j = 0 ; j <= col; j ++)
{
if (i == 0 || j == 0)
continue;
if (i == 1)
{
sum[i][j] = grid[i - 1][j - 1] + sum[i][j-1];
}
else if(j == 1)
{
sum[i][j] = grid[i - 1][j - 1] + sum[i-1][j];
}
else
{
sum[i][j] = (sum[i-1][j] < sum[i][j-1]) ? sum[i-1][j]:sum[i][j-1];
sum[i][j] += grid[i-1][j-1];
//cout << i<<" "<<j<<" "<<grid[i-1][j-1] << sum[i][j]<<endl;
}
}
}
return sum[raw][col];
}
};