Bird
Raised Fist0
DSA Typescriptprogramming

Minimum Path Sum in Grid in DSA Typescript

Choose your learning style10 modes available
Mental Model
Find the smallest total by moving only right or down from the top-left to the bottom-right of a grid.
Analogy: Imagine walking through a city grid where each block has a cost to cross. You want to find the cheapest path from your home (top-left) to your friend's house (bottom-right) by only moving east or south.
Start:
[1] -> [3] -> [1]
 ↓      ↓      ↓
[1] -> [5] -> [1]
 ↓      ↓      ↓
[4] -> [2] -> [1]

You can only move -> or ↓ to reach the bottom-right.
Dry Run Walkthrough
Input: grid = [[1,3,1],[1,5,1],[4,2,1]]
Goal: Find the minimum sum path from top-left to bottom-right moving only right or down.
Step 1: Start at top-left cell (0,0) with value 1
[1] -> [3] -> [1]
 ↓      ↓      ↓
[1] -> [5] -> [1]
 ↓      ↓      ↓
[4] -> [2] -> [1]
Why: We begin from the starting point with initial cost 1.
Step 2: Calculate minimum path sums for first row by adding left cell sums
[1] -> [4] -> [5]
 ↓      ↓      ↓
[1] -> [5] -> [1]
 ↓      ↓      ↓
[4] -> [2] -> [1]
Why: Only right moves possible in first row, so sums accumulate.
Step 3: Calculate minimum path sums for first column by adding above cell sums
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [5] -> [1]
 ↓      ↓      ↓
[6] -> [2] -> [1]
Why: Only down moves possible in first column, so sums accumulate.
Step 4: Calculate cell (1,1) as min(top, left) + current value: min(4,2)+5=7
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [7] -> [1]
 ↓      ↓      ↓
[6] -> [2] -> [1]
Why: Choose cheaper path between coming from top or left.
Step 5: Calculate cell (1,2): min(top, left)+value = min(5,7)+1=6
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [7] -> [6]
 ↓      ↓      ↓
[6] -> [2] -> [1]
Why: Pick minimum sum path to this cell.
Step 6: Calculate cell (2,1): min(top, left)+value = min(7,6)+2=8
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [7] -> [6]
 ↓      ↓      ↓
[6] -> [8] -> [1]
Why: Choose minimum path sum to this cell.
Step 7: Calculate cell (2,2): min(top, left)+value = min(6,8)+1=7
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [7] -> [6]
 ↓      ↓      ↓
[6] -> [8] -> [7]
Why: Final cell sum is minimum path sum to bottom-right.
Result:
[1] -> [4] -> [5]
 ↓      ↓      ↓
[2] -> [7] -> [6]
 ↓      ↓      ↓
[6] -> [8] -> [7]
Minimum path sum = 7
Annotated Code
DSA Typescript
class Solution {
  minPathSum(grid: number[][]): number {
    const m = grid.length;
    const n = grid[0].length;

    // Update first row sums
    for (let j = 1; j < n; j++) {
      grid[0][j] += grid[0][j - 1];
    }

    // Update first column sums
    for (let i = 1; i < m; i++) {
      grid[i][0] += grid[i - 1][0];
    }

    // Update rest of grid with min path sums
    for (let i = 1; i < m; i++) {
      for (let j = 1; j < n; j++) {
        grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
      }
    }

    return grid[m - 1][n - 1];
  }
}

// Driver code
const grid = [
  [1, 3, 1],
  [1, 5, 1],
  [4, 2, 1]
];
const sol = new Solution();
console.log(sol.minPathSum(grid));
for (let j = 1; j < n; j++) { grid[0][j] += grid[0][j - 1]; }
Accumulate sums along the first row since only right moves possible
for (let i = 1; i < m; i++) { grid[i][0] += grid[i - 1][0]; }
Accumulate sums along the first column since only down moves possible
for (let i = 1; i < m; i++) { for (let j = 1; j < n; j++) { grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]); } }
For each cell, add the minimum of top or left cell sums to current cell value
return grid[m - 1][n - 1];
Return the minimum path sum at bottom-right cell
OutputSuccess
7
Complexity Analysis
Time: O(m*n) because we visit each cell once to compute minimum sums
Space: O(1) because we update the input grid in place without extra space
vs Alternative: Compared to recursive solutions without memoization which are exponential, this dynamic programming approach is efficient and uses constant extra space.
Edge Cases
Empty grid
Function returns undefined or error since no cells to process
DSA Typescript
const m = grid.length; const n = grid[0].length;
Single cell grid [[5]]
Returns the single cell value 5 as minimum path sum
DSA Typescript
return grid[m - 1][n - 1];
Grid with one row [[1,2,3]]
Accumulates sums along the row correctly, returns 6
DSA Typescript
for (let j = 1; j < n; j++) { grid[0][j] += grid[0][j - 1]; }
When to Use This Pattern
When you see a grid and need to find a path with minimum or maximum sum moving only right or down, use dynamic programming to build solutions from smaller subproblems.
Common Mistakes
Mistake: Not updating the first row and first column separately before filling the rest of the grid
Fix: Accumulate sums along first row and first column before processing inner cells
Mistake: Using max instead of min when choosing between top and left cells
Fix: Use Math.min to pick the smaller sum path
Summary
Calculates the minimum sum path from top-left to bottom-right in a grid moving only right or down.
Use when you need the cheapest path sum in a grid with movement constraints.
Build the solution by accumulating minimum sums row-wise and column-wise, then fill the rest using the minimum of top or left neighbors.

Practice

(1/5)
1. What does the "Minimum Path Sum in Grid" problem ask you to find?
Given a grid of numbers, find the path from top-left to bottom-right with the smallest sum.
easy
A. The maximum number in the grid
B. The path with the smallest sum of numbers from top-left to bottom-right
C. The number of paths from top-left to bottom-right
D. The path with the largest sum of numbers from top-left to bottom-right

Solution

  1. Step 1: Understand the problem goal

    The problem asks to find a path from the top-left corner to the bottom-right corner of the grid that has the smallest sum of all numbers along the path.
  2. Step 2: Clarify path movement

    Movement is only allowed down or right at each step, so the path is constrained.
  3. Final Answer:

    The path with the smallest sum of numbers from top-left to bottom-right -> Option B
  4. Quick Check:

    Minimum path sum means smallest total sum [OK]
Hint: Look for smallest sum path from top-left to bottom-right [OK]
Common Mistakes:
  • Confusing minimum with maximum sum
  • Counting number of paths instead of sum
  • Ignoring movement constraints (only right/down)
2. Which TypeScript syntax correctly initializes a 2D array named grid with values [[1,2],[3,4]]?
easy
A. const grid = [1,2,3,4];
B. const grid = new Array(1,2,3,4);
C. const grid = [[1,2],[3,4]];
D. const grid = Array(2,2);

Solution

  1. Step 1: Understand 2D array initialization

    To create a 2D array with specific values, use nested arrays like [[1,2],[3,4]].
  2. Step 2: Check each option

    const grid = [[1,2],[3,4]]; correctly uses nested arrays. Options B and D create arrays but not nested with those values. const grid = [1,2,3,4]; is a flat array.
  3. Final Answer:

    const grid = [[1,2],[3,4]]; -> Option C
  4. Quick Check:

    Nested arrays create 2D arrays [OK]
Hint: Use nested brackets for 2D arrays in TypeScript [OK]
Common Mistakes:
  • Using flat arrays instead of nested arrays
  • Using Array constructor incorrectly
  • Confusing array length with array content
3. What is the minimum path sum for the grid below?
const grid = [
  [1, 3, 1],
  [1, 5, 1],
  [4, 2, 1]
];
medium
A. 7
B. 8
C. 9
D. 10

Solution

  1. Step 1: Trace possible paths and sums

    Possible minimum path: 1 -> 3 -> 1 -> 1 -> 1 = 7 (wrong path, check carefully). Another path: 1 -> 1 -> 5 -> 1 -> 1 = 9. Correct minimum path is 1 -> 3 -> 1 -> 1 -> 1 = 7 is invalid because movement is only right/down. Let's check carefully:
    Path: (0,0)=1 -> (1,0)=1 -> (2,0)=4 -> (2,1)=2 -> (2,2)=1 sum=1+1+4+2+1=9
    Path: (0,0)=1 -> (0,1)=3 -> (0,2)=1 -> (1,2)=1 -> (2,2)=1 sum=1+3+1+1+1=7
    But movement only right/down, so path is valid.
    Check if any smaller sum exists.
  2. Step 2: Confirm minimum sum

    The minimum path sum is 8 by moving right, down, down, right.
    Path: (0,0)=1 -> (0,1)=3 -> (1,1)=5 -> (2,1)=2 -> (2,2)=1 sum=1+3+5+2+1=12 (too large)
    Try path: (0,0)=1 -> (1,0)=1 -> (1,1)=5 -> (1,2)=1 -> (2,2)=1 sum=1+1+5+1+1=9
    Try path: (0,0)=1 -> (1,0)=1 -> (2,0)=4 -> (2,1)=2 -> (2,2)=1 sum=1+1+4+2+1=9
    Try path: (0,0)=1 -> (0,1)=3 -> (0,2)=1 -> (1,2)=1 -> (2,2)=1 sum=1+3+1+1+1=7 (valid)
    So minimum sum is 7.
  3. Final Answer:

    7 -> Option A
  4. Quick Check:

    Sum of path 1->3->1->1->1 = 7 [OK]
Hint: Add numbers along right/down paths, pick smallest sum [OK]
Common Mistakes:
  • Adding numbers from invalid paths (not only right/down)
  • Forgetting to include starting cell value
  • Mixing row and column indices
4. Identify the error in this TypeScript function to find minimum path sum:
function minPathSum(grid: number[][]): number {
  const m = grid.length;
  const n = grid[0].length;
  const dp = Array(m).fill(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];
}
medium
A. grid is not checked for empty input
B. Loop ranges are incorrect, should start from 0
C. Return statement returns wrong cell
D. dp array initialization shares references causing incorrect updates

Solution

  1. Step 1: Analyze dp array initialization

    Using Array(m).fill(Array(n).fill(0)) creates m references to the same inner array, so updating one row updates all rows.
  2. Step 2: Understand impact on dp updates

    Because all rows share the same array, dp updates overwrite each other, causing wrong results.
  3. Final Answer:

    dp array initialization shares references causing incorrect updates -> Option D
  4. Quick Check:

    Array.fill with objects shares references [OK]
Hint: Use loops or map to create independent inner arrays [OK]
Common Mistakes:
  • Using fill for 2D array causes shared references
  • Ignoring empty grid input checks
  • Incorrect loop start indices
5. Given a grid:
const grid = [
  [2, 1, 3],
  [6, 5, 4],
  [7, 8, 9]
];

Write a TypeScript function to find the minimum path sum from top-left to bottom-right, moving only right or down. What is the minimum path sum?
hard
A. 19
B. 20
C. 21
D. 18

Solution

  1. Step 1: Calculate dp values row-wise and column-wise

    Start dp[0][0] = 2.
    First row: dp[0][1] = 2+1=3, dp[0][2] = 3+3=6.
    First column: dp[1][0] = 2+6=8, dp[2][0] = 8+7=15.
  2. Step 2: Fill remaining dp cells using min of top or left + current grid value

    dp[1][1] = min(dp[0][1], dp[1][0]) + 5 = min(3,8)+5=8
    dp[1][2] = min(dp[0][2], dp[1][1]) + 4 = min(6,8)+4=10
    dp[2][1] = min(dp[1][1], dp[2][0]) + 8 = min(8,15)+8=16
    dp[2][2] = min(dp[1][2], dp[2][1]) + 9 = min(10,16)+9=19
  3. Final Answer:

    19 -> Option A
  4. Quick Check:

    Minimum path sum dp[m-1][n-1] = 19 [OK]
Hint: Use dp table, fill from top-left to bottom-right [OK]
Common Mistakes:
  • Adding values incorrectly in dp table
  • Mixing up indices for rows and columns
  • Not considering only right/down moves
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard