Table of Contents
Problem Statement
The Minimum Path Sum LeetCode Solution – “Minimum Path Sum” says that given a n x m grid consisting of non-negative integers and we need to find a path from top-left to bottom right, which minimizes the sum of all numbers along the path.
We can only move either down or right at any point in time.
Example:

Input: grid = [[1,3,1],[1,5,1],[4,2,1]]
Output:7
Explanation:
- The optimal path that minimizes the sum from (0, 0) to (n – 1, m – 1) consists of the following cells.
- (0, 0), (0, 1), (0, 2), (1, 2), (2, 2) and sum of all cells values in the minimum path is: 1 + 3 + 1 + 1 + 1 = 7
Input: grid = [[1,2,3],[4,5,6]]
Output: 12
Explanation:
- The Minimum Path Sum is 12 and the path corresponding to such value is: (0, 0), (0, 1), (0, 2), (1, 2).
Approach
Idea:
- The main idea to solve this problem is to use dynamic programming.
- To reach every cell (i, j), we can either come from the cell lying upwards (i – 1, j) or from the cell lying leftwards (i, j – 1).
- Iterate for each row and each column, and for every cell find the minimum of these two values:
- grid[i – 1][j] if (i – 1, j) exists otherwise INT_MAX.
- grid[i][j – 1] if (i, j – 1) exists otherwise INT_MAX.
- Hence, the minimum cost to reach the current cell will be grid[i][j] + min_value where min_value is the value obtained in the above step.
- Our answer will be grid[n – 1][m – 1].
Code
Minimum Path Sum Leetcode C++ Solution:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[n - 1].size();
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int curr = INT_MAX;
if(i - 1 >= 0)
curr = min(curr, grid[i - 1][j]);
if(j - 1 >= 0)
curr = min(curr, grid[i][j - 1]);
if(curr == INT_MAX)
curr = 0;
grid[i][j] += curr;
}
}
return grid[n - 1][m - 1];
}
};Minimum Path Sum Leetcode Java Solution:
class Solution {
public int minPathSum(int[][] grid) {
int n = grid.length, m = grid[n - 1].length;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int curr = Integer.MAX_VALUE;
if(i - 1 >= 0){
curr = Math.min(curr, grid[i - 1][j]);
}
if(j - 1 >= 0){
curr = Math.min(curr, grid[i][j - 1]);
}
if(curr == Integer.MAX_VALUE){
curr = 0;
}
grid[i][j] += curr;
}
}
return grid[n - 1][m - 1];
}
}Complexity Analysis for Minimum Path Sum Leetcode Solution
Time Complexity
The time complexity of the above code is O(N*M) since we’re iterating for each cell, where N = number of rows and M = number of columns.
Space Complexity
The space complexity of the above code is O(1) since we are using constant extra space.
Reference: https://en.wikipedia.org/wiki/Shortest_path_problem