# [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)$ :::