# [64\. Minimum Path Sum](https://leetcode.com/problems/minimum-path-sum/)
:::spoiler Hint
```cpp=
class Solution {
public:
int minPathSum(vector<vector<int>>& grid)
{
// Update the first column by accumulating values from top to bottom
// Update the first row by accumulating values from left to right
// Update the rest of the grid by choosing the minimum path sum at each cell
for ()
{
for ()
{
// Add the minimum value from the cell above or to the left
}
}
// The bottom-right cell contains the minimum path sum
}
};
```
:::
:::spoiler
```cpp=
class Solution {
public:
int minPathSum(vector<vector<int>>& grid)
{
int m = grid.size(), n = grid[0].size();
for (int i = 1; i < m; ++i)
{
grid[i][0] += grid[i - 1][0];
}
for (int j = 1; j < n; ++j)
{
grid[0][j] += grid[0][j - 1];
}
for (int i = 1; i < m; ++i)
{
for (int j = 1; j < n; ++j)
{
grid[i][j] += min(grid[i - 1][j], grid[i][j - 1]);
}
}
return grid[m - 1][n - 1];
}
};
```
- T: $O(M \cdot N)$
- S: $O(1)$
:::