Skip to main content

64. Minimum Path Sum

/*
* @lc app=leetcode id=64 lang=cpp
*
* [64] Minimum Path Sum
*
* https://leetcode.com/problems/minimum-path-sum/description/
*
* algorithms
* Medium (64.84%)
* Likes: 12556
* Dislikes: 172
* Total Accepted: 1.3M
* Total Submissions: 2M
* Testcase Example: '[[1,3,1],[1,5,1],[4,2,1]]'
*
* 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.
*
*
* Example 1:
*
*
* Input: grid = [[1,3,1],[1,5,1],[4,2,1]]
* Output: 7
* Explanation: Because the path 1 → 3 → 1 → 1 → 1 minimizes the sum.
*
*
* Example 2:
*
*
* Input: grid = [[1,2,3],[4,5,6]]
* Output: 12
*
*
*
* Constraints:
*
*
* m == grid.length
* n == grid[i].length
* 1 <= m, n <= 200
* 0 <= grid[i][j] <= 200
*
*
*/

// @lc code=start
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];
}
};
// @lc code=end
  • T: O(MN)O(M \cdot N)
  • S: O(1)O(1)