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!