📖 Scenario: Imagine you are helping a robot find how many ways it can move from the top-left corner to the bottom-right corner of a grid. The robot can only move right or down.
🎯 Goal: Build a program that calculates the number of unique paths the robot can take in a grid of given size using dynamic programming.
📋 What You'll Learn
Create a 2D array to represent the grid
Use a variable to store the number of rows and columns
Fill the grid with the number of ways to reach each cell
Print the number of unique paths to the bottom-right cell
💡 Why This Matters
🌍 Real World
Robots and automated systems often need to find paths in grids or maps. This method helps calculate how many ways a robot can reach a destination.
💼 Career
Understanding dynamic programming and grid traversal is useful in software development roles involving algorithms, robotics, game development, and pathfinding problems.
Progress0 / 4 steps
1
Create the grid size variables
Create two variables called rows and cols and set them to 3 and 3 respectively.
DSA Typescript
Hint
Use const to create variables for rows and columns with values 3.
2
Initialize the 2D grid array
Create a 2D array called dp with rows arrays each containing cols zeros.
DSA Typescript
Hint
Use Array.from with a mapping function to create a 2D array filled with zeros.
3
Fill the grid with unique path counts
Use nested for loops with variables r and c to fill dp. Set dp[r][c] to 1 if r or c is zero. Otherwise, set dp[r][c] to dp[r-1][c] + dp[r][c-1].
DSA Typescript
Hint
Use two loops to fill the grid. The first row and column are always 1. Other cells are sum of top and left cells.
4
Print the number of unique paths
Print the value of dp[rows - 1][cols - 1] using console.log.
DSA Typescript
Hint
Print the bottom-right cell value which holds the total unique paths.
Practice
(1/5)
1. What does the problem "Unique Paths in Grid DP" typically ask you to find?
easy
A. The number of ways to move from the top-left to the bottom-right corner of a grid using only right and down moves.
B. The shortest path distance between two points in a grid.
C. The maximum sum path in a grid.
D. The number of obstacles in a grid.
Solution
Step 1: Understand the problem statement
The problem asks for counting all possible paths from the top-left corner to the bottom-right corner of a grid, moving only right or down.
Step 2: Identify the key movement constraints
Only moves to the right or down are allowed, so the problem counts unique sequences of these moves.
Final Answer:
The number of ways to move from the top-left to the bottom-right corner of a grid using only right and down moves. -> Option A
Quick Check:
Unique paths = count of right/down moves sequences [OK]
Hint: Count paths by moving only right or down [OK]
Common Mistakes:
Confusing unique paths with shortest path length
Including diagonal moves
Counting obstacles instead of paths
2. Which of the following TypeScript code snippets correctly initializes a 2D DP array for a grid of size m x n filled with zeros?
easy
A. const dp = Array(m).fill(Array(n).fill(0));
B. const dp = Array(m).map(Array(n).fill(0));
C. const dp = new Array(m).map(new Array(n).fill(0));
D. const dp = Array.from({ length: m }, () => Array(n).fill(0));
Solution
Step 1: Understand how to create independent rows
Using Array.from with a mapping function creates new arrays for each row, avoiding shared references.
Step 2: Analyze each option
const dp = Array(m).fill(Array(n).fill(0)); shares the same inner array reference for all rows, causing bugs. Options C and D pass an array (not a function) to .map(), causing TypeError. const dp = Array.from({ length: m }, () => Array(n).fill(0)); correctly creates independent rows filled with zeros.
Final Answer:
const dp = Array.from({ length: m }, () => Array(n).fill(0)); -> Option D
Quick Check:
Use Array.from with a function for 2D arrays [OK]
Hint: Use Array.from with a function to avoid shared references [OK]
Common Mistakes:
Using fill with a single array causes shared references
Passing non-function to .map() causes TypeError
Not initializing inner arrays separately
3. What is the output of the following TypeScript code for a 3x3 grid?
function uniquePaths(m: number, n: number): number {
const dp = Array.from({ length: m }, () => Array(n).fill(1));
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
console.log(uniquePaths(3, 3));
medium
A. 1
B. 3
C. 6
D. 9
Solution
Step 1: Initialize dp array with 1s
Each cell in the first row and first column is 1, representing only one path to those cells.
Step 2: Fill dp using sum of top and left cells
For each cell dp[i][j], sum dp[i-1][j] (top) and dp[i][j-1] (left). For 3x3, dp[2][2] = 6.
Final Answer:
6 -> Option C
Quick Check:
Unique paths in 3x3 grid = 6 [OK]
Hint: Sum paths from top and left cells to fill dp [OK]
Common Mistakes:
Starting loops from 0 instead of 1
Not initializing first row and column to 1
Returning wrong dp cell
4. Identify the bug in this TypeScript code for unique paths and select the fix:
function uniquePaths(m: number, n: number): number {
const dp = Array.from({ length: m }, () => Array(n).fill(0));
for (let i = 0; i < m; i++) dp[i][0] = 1;
for (let j = 0; j < n; j++) dp[0][j] = 1;
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] * dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
medium
A. Change multiplication (*) to addition (+) in dp update.
B. Initialize dp with 1s instead of 0s.
C. Start loops from 0 instead of 1.
D. Return dp[0][0] instead of dp[m-1][n-1].
Solution
Step 1: Identify the dp update formula
The code uses multiplication (*) to combine paths, which is incorrect because paths add up, not multiply.
Step 2: Correct the dp update to addition
Replace dp[i - 1][j] * dp[i][j - 1] with dp[i - 1][j] + dp[i][j - 1] to sum paths from top and left.
Final Answer:
Change multiplication (*) to addition (+) in dp update. -> Option A
Quick Check:
Paths combine by addition, not multiplication [OK]
Hint: Sum top and left dp cells, don't multiply [OK]
Common Mistakes:
Using multiplication instead of addition
Incorrect dp initialization
Wrong loop start indices
5. Given a grid with obstacles represented by 1s and empty spaces by 0s, how would you modify the unique paths DP solution to count paths avoiding obstacles?
const grid = [
[0,0,0],
[0,1,0],
[0,0,0]
];
hard
A. Ignore obstacles and calculate paths normally.
B. Set dp[i][j] = 0 if grid[i][j] is 1; else dp[i][j] = dp[i-1][j] + dp[i][j-1].
C. Set dp[i][j] = 1 if grid[i][j] is 1; else 0.
D. Multiply dp[i-1][j] and dp[i][j-1] regardless of obstacles.
Solution
Step 1: Mark obstacle cells as unreachable
If grid[i][j] is 1 (obstacle), set dp[i][j] = 0 to block paths through it.
Step 2: Calculate dp for free cells
For cells without obstacles, dp[i][j] = dp[i-1][j] + dp[i][j-1], summing paths from top and left.
Final Answer:
Set dp[i][j] = 0 if grid[i][j] is 1; else dp[i][j] = dp[i-1][j] + dp[i][j-1]. -> Option B
Quick Check:
Obstacles block paths by setting dp to zero [OK]
Hint: Set dp to zero on obstacles, sum paths otherwise [OK]
Common Mistakes:
Ignoring obstacles in dp calculation
Setting dp to 1 on obstacles
Multiplying paths instead of adding
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.