Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources
Minimum Path Sum

Minimum Path Sum

Problem Statement

You’re navigating a grid from top-left to bottom-right, moving only right or down. Each cell has a cost. Find the minimum sum path. This medium-level DP journey is a treasure map—find the cheapest route!

Example

Input: grid = [[1,3,1],[1,5,1],[4,2,1]]

Output: 7 (1→3→1→1→1)

Input: grid = [[1,2],[3,4]]

Output: 7 (1→2→4)

Input: grid = [[1]]

Output: 1

Code

Java
Python
JavaScript
public class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length, n = grid[0].length;
        int[][] dp = new int[m][n];
        dp[0][0] = grid[0][0];
        for (int i = 1; i < m; i++) dp[i][0] = dp[i-1][0] + grid[i][0];
        for (int j = 1; j < n; j++) dp[0][j] = dp[0][j-1] + grid[0][j];
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j];
            }
        }
        return dp[m-1][n-1];
    }
}
            
def min_path_sum(grid):
    m, n = len(grid), len(grid[0])
    dp = [[0] * n for _ in range(m)]
    dp[0][0] = grid[0][0]
    for i in range(1, m):
        dp[i][0] = dp[i-1][0] + grid[i][0]
    for j in range(1, n):
        dp[0][j] = dp[0][j-1] + grid[0][j]
    for i in range(1, m):
        for j in range(1, n):
            dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
    return dp[m-1][n-1]

# Example usage
print(min_path_sum([[1,3,1],[1,5,1],[4,2,1]]))  # 7
print(min_path_sum([[1,2],[3,4]]))  # 7
            
function minPathSum(grid) {
    let m = grid.length, n = grid[0].length;
    let dp = Array(m).fill().map(() => Array(n).fill(0));
    dp[0][0] = grid[0][0];
    for (let i = 1; i < m; i++) dp[i][0] = dp[i-1][0] + grid[i][0];
    for (let j = 1; j < n; j++) dp[0][j] = dp[0][j-1] + grid[0][j];
    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j];
        }
    }
    return dp[m-1][n-1];
}

// Example usage
console.log(minPathSum([[1,3,1],[1,5,1],[4,2,1]]));  // 7
console.log(minPathSum([[1,2],[3,4]]));  // 7
            

Explanation

  • DP Insight: dp[i][j] = min cost to reach (i,j).
  • Steps: Fill edges first, then min of up or left plus current cost.
  • Flow Example ([[1,3,1],[1,5,1]]): dp[0][2]=5, dp[1][2]=7 (1→3→1→1).
  • Why It Works: Builds shortest path incrementally.

Note

Time complexity: O(m*n), Space complexity: O(m*n). Navigate the grid with DP thrift!