What is the problem statement of the Unique Paths in Grid DP?
Find the number of different ways to move from the top-left corner to the bottom-right corner of a grid, moving only down or right.
Click to reveal answer
beginner
What does the DP state represent in Unique Paths problem?
DP state dp[i][j] represents the number of unique paths to reach cell (i, j) from the start (0, 0).
Click to reveal answer
intermediate
What is the recurrence relation used in Unique Paths DP?
dp[i][j] = dp[i-1][j] + dp[i][j-1], meaning paths to current cell = paths from above + paths from left.
Click to reveal answer
beginner
Why do we initialize the first row and first column with 1 in Unique Paths DP?
Because there is only one way to reach any cell in the first row (all moves right) or first column (all moves down).
Click to reveal answer
advanced
How does Unique Paths DP handle obstacles if added to the grid?
Cells with obstacles have dp[i][j] = 0, meaning no paths go through them; other cells sum paths from neighbors if not blocked.
Click to reveal answer
In Unique Paths DP, what does dp[0][0] represent?
ANumber of rows
BNo paths available
CStarting point with 1 path
DNumber of obstacles
✗ Incorrect
dp[0][0] is the start cell, so it has exactly 1 path to itself.
Which moves are allowed in the Unique Paths grid problem?
ADown and Left
BUp and Left
CUp and Right
DDown and Right
✗ Incorrect
Only moves down or right are allowed to reach the bottom-right corner.
What is the time complexity of the Unique Paths DP solution for an m x n grid?
AO(m + n)
BO(m * n)
CO(m^2 * n^2)
DO(1)
✗ Incorrect
We fill an m by n DP table once, so time complexity is O(m * n).
If dp[i][j] = 0 in Unique Paths with obstacles, what does it mean?
ACell is unreachable or blocked
BCell has multiple paths
CCell is the start
DCell is the destination
✗ Incorrect
Zero paths means the cell is blocked or no way to reach it.
How do you compute dp[i][j] if there are no obstacles?
Adp[i][j] = dp[i-1][j] + dp[i][j-1]
Bdp[i][j] = dp[i-1][j] * dp[i][j-1]
Cdp[i][j] = max(dp[i-1][j], dp[i][j-1])
Ddp[i][j] = dp[i-1][j] - dp[i][j-1]
✗ Incorrect
Paths to current cell are sum of paths from above and left cells.
Explain how to use dynamic programming to find the number of unique paths in a grid.
Think about how paths build from top-left to bottom-right.
You got /4 concepts.
Describe how obstacles affect the Unique Paths DP solution and how to handle them.
Obstacles block paths, so no paths go through those cells.
You got /3 concepts.
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.