What is the problem statement of Unique Paths in Grid DP?
Find the number of 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 DP stand for and why is it used in Unique Paths?
DP stands for Dynamic Programming. It is used to store results of subproblems (number of ways to reach each cell) to avoid repeated calculations.
Click to reveal answer
beginner
How do you initialize the first row and first column in the DP table for Unique Paths?
Set all cells in the first row and first column to 1 because there is only one way to reach cells in the first row (all right moves) or first column (all down moves).
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 ways to reach cell (i,j) is sum of ways from the cell above and the cell to the left.
Click to reveal answer
beginner
Why can't we move diagonally in the Unique Paths problem?
The problem constraints allow only moves to the right or down, so diagonal moves are not allowed and not counted.
Click to reveal answer
In Unique Paths, what does dp[i][j] represent?
ANumber of ways to reach cell (i,j)
BMinimum steps to reach cell (i,j)
CMaximum value in row i
DNumber of obstacles in cell (i,j)
✗ Incorrect
dp[i][j] stores the number of unique ways to reach the cell at row i and column j.
How many ways are there to reach any cell in the first row?
A1
B0
CDepends on the column
DEqual to row number
✗ Incorrect
Only one way: moving right from the start.
Which moves are allowed in the Unique Paths problem?
AUp and left
BAll directions
CRight and down
DDiagonal only
✗ Incorrect
Only moves to the right or down are allowed.
What is the base case for dp[0][0] in Unique Paths?
A0
B1
CDepends on grid size
DUndefined
✗ Incorrect
Starting cell has 1 way to be at itself.
If dp[i][j] = dp[i-1][j] + dp[i][j-1], what does this mean?
ASum of all cells in the grid
BWays to reach (i,j) come from below and right cells
CNumber of obstacles in row i and column j
DWays to reach (i,j) come from above and left cells
✗ Incorrect
You can only come from the cell above or the cell to the left.
Explain how to use dynamic programming to find the number of unique paths in a grid.
Think about how you can build the solution step by step from the start.
You got /4 concepts.
Describe why the first row and first column in the DP table are filled with 1s in the Unique Paths problem.
Imagine walking only along the edges of the grid.
You got /3 concepts.
Practice
(1/5)
1. What does the problem Unique Paths in Grid DP ask you to find?
easy
A. The number of different ways to move from the top-left to bottom-right corner of a grid using only right and down moves.
B. The shortest path length from top-left to bottom-right in a grid.
C. The maximum sum path from top-left to bottom-right in a grid.
D. The number of obstacles in the grid.
Solution
Step 1: Understand the problem goal
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: Differentiate from other path problems
It is not about shortest path length, maximum sum, or obstacles count, but about counting unique paths.
Final Answer:
The number of different ways to move from the top-left to bottom-right corner of a grid using only right and down moves. -> Option A
Quick Check:
Unique paths count = number of ways to move right/down [OK]
Hint: Count paths by moving only right or down [OK]
Common Mistakes:
Confusing unique paths with shortest path length
Thinking about obstacles when none are given
Counting diagonal moves
2. Which of the following JavaScript code snippets correctly initializes a 2D array dp of size m x n filled with zeros for the Unique Paths problem?
easy
A. const dp = Array.from({ length: m }, () => Array(n).fill(0));
B. const dp = Array(m).fill(Array(n).fill(0));
C. const dp = new Array(m).map(() => new Array(n));
D. const dp = Array(m).map(() => Array(n));
Solution
Step 1: Understand array initialization in JavaScript
Using Array.from with a mapping function creates independent inner arrays, 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 create inner arrays with undefined elements instead of zeros (missing .fill(0)). const dp = Array.from({ length: m }, () => Array(n).fill(0)); correctly creates independent arrays filled with zeros.
Final Answer:
const dp = Array.from({ length: m }, () => Array(n).fill(0)); -> Option A
Quick Check:
Use Array.from with arrow function for 2D array [OK]
Hint: Use Array.from with function to avoid shared inner arrays [OK]
Common Mistakes:
Using fill with array directly causing shared references
Not filling inner arrays with zeros (elements undefined)
Not initializing inner arrays separately
3. What is the output of the following JavaScript code for uniquePaths(3, 3)?
function uniquePaths(m, n) {
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];
}
console.log(uniquePaths(3, 3));
medium
A. 3
B. 6
C. 9
D. 12
Solution
Step 1: Initialize dp array and base cases
Set first row and first column to 1 because only one way to reach cells in first row or column.
Adding instead of summing dp[i-1][j] and dp[i][j-1]
Off-by-one errors in loops
4. The following code attempts to solve the Unique Paths problem but overwrites values across multiple rows unexpectedly for uniquePaths(3, 3). What is the bug?
function uniquePaths(m, n) {
const dp = Array(m).fill(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. The dp array is not initialized with zeros.
B. The loops start from 1 instead of 0.
C. Using fill with array causes all rows to reference the same array.
D. The return statement is outside the function.
Solution
Step 1: Analyze dp initialization
Using Array(m).fill(Array(n).fill(0)) makes all rows point to the same inner array, so updating one row updates all rows.
Step 2: Understand effect on dp updates
Setting dp[i][0] = 1 changes the same array for all rows. During table filling, updates overwrite values from earlier rows (e.g., dp[1][1] becomes 3 instead of 2), causing incorrect intermediate values.
Final Answer:
Using fill with array causes all rows to reference the same array. -> Option C
Quick Check:
Shared references cause wrong dp updates [OK]
Hint: Avoid fill with array; use Array.from for independent rows [OK]
Common Mistakes:
Using fill with array causing shared references
Incorrect loop ranges
Misplaced return statement
5. Given a grid with obstacles represented by a 2D array obstacleGrid where 1 means obstacle and 0 means free cell, how would you modify the Unique Paths DP solution to count unique paths avoiding obstacles?
hard
A. Set dp[i][j] = 1 for all cells without checking obstacles.
B. Ignore obstacles and calculate paths as usual.
C. Use recursion without memoization to count paths.
D. Initialize dp with zeros, set dp[0][0] = 1 if no obstacle, then for each cell dp[i][j] = 0 if obstacle else dp[i-1][j] + dp[i][j-1].
Solution
Step 1: Initialize dp considering obstacles
Set dp[0][0] to 1 only if the start cell has no obstacle; otherwise 0.
Step 2: Update dp cells with obstacle check
For each cell, if obstacleGrid[i][j] is 1, dp[i][j] = 0 (no path). Else dp[i][j] = dp[i-1][j] + dp[i][j-1].
Step 3: Return dp[m-1][n-1]
This gives the count of unique paths avoiding obstacles.
Final Answer:
Initialize dp with zeros, set dp[0][0] = 1 if no obstacle, then for each cell dp[i][j] = 0 if obstacle else dp[i-1][j] + dp[i][j-1]. -> Option D
Quick Check:
Obstacle cells block paths by setting dp to 0 [OK]
Hint: Set dp=0 for obstacles, sum paths only for free cells [OK]
Common Mistakes:
Ignoring obstacles in dp calculation
Not initializing start cell properly
Using recursion without memoization causing inefficiency
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.