What is the problem statement of Unique Paths in Grid DP?
Find the number of unique ways to move from the top-left corner to the bottom-right corner of a grid, moving only right or down.
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 DP table for Unique Paths?
Set 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 only allow moves to the right or down, so diagonal moves are not considered.
Click to reveal answer
In Unique Paths DP, 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 of the grid?
A1
BDepends on the row
CDepends on the column
D0
✗ Incorrect
There is only one way to reach cells in the first row by moving right from the start.
Which moves are allowed in the Unique Paths problem?
ALeft and Up
BAll directions
CDiagonal only
DRight and Down
✗ Incorrect
Only moves to the right or down are allowed.
What is the time complexity of the DP solution for Unique Paths in an m x n grid?
AO(m + n)
BO(m * n)
CO(m^2 * n^2)
DO(1)
✗ Incorrect
The DP solution fills an m by n table, so time complexity is O(m * n).
If the grid size is 3x3, how many unique paths are there from top-left to bottom-right?
A3
B9
C6
D12
✗ Incorrect
For a 3x3 grid, the number of unique paths is 6.
Explain how to use dynamic programming to find the number of unique paths in a grid.
Think about how to build the solution from smaller subproblems.
You got /4 concepts.
Describe the base cases and recurrence relation in the Unique Paths DP problem.
Focus on how the first row and column are special.
You got /2 concepts.
Practice
(1/5)
1. What does the problem "Unique Paths in Grid DP" ask you to find? Unique Paths means:
easy
A. The shortest path length from top-left to bottom-right in a grid
B. The number of ways to move from top-left to bottom-right in a grid using only right and down moves
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 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 meaning of "Unique Paths"
Unique paths means counting distinct ways, not shortest or maximum sum paths.
Final Answer:
The number of ways to move from top-left to bottom-right in a grid using only right and down moves -> Option B
Quick Check:
Unique Paths = Count of right/down moves paths [OK]
Hint: Unique Paths count all right/down routes from start to end [OK]
Common Mistakes:
Confusing unique paths with shortest path length
Thinking about obstacles when none are given
Mixing path count with path sum
2. Which of the following Go code snippets correctly initializes a 2D slice dp of size m x n with zeros for Unique Paths DP?
B. dp := make([]int, m*n)
for i := 0; i < m*n; i++ {
dp[i] = 0
}
C. var dp [m][n]int
for i := 0; i < m; i++ {
for j := 0; j < n; j++ {
dp[i][j] = 1
}
}
D. dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
Solution
Step 1: Understand Go slice initialization for 2D arrays
In Go, a 2D slice is created by first making the outer slice, then initializing each inner slice.
Step 2: Check each option
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
} correctly creates a slice of length m, then each inner slice of length n, all initialized to zero by default.
Final Answer:
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
} -> Option D
Quick Check:
2D slice init with nested make loops = dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
} [OK]
Hint: Use nested make to create 2D slices in Go [OK]
Common Mistakes:
Using one-dimensional slice for 2D data
Initializing inner slices with wrong length
Appending slices incorrectly
3. What is the output of the following Go code for Unique Paths in a 3x3 grid?
func uniquePaths(m, n int) int {
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
for i := 0; i < m; i++ {
dp[i][0] = 1
}
for j := 0; j < n; j++ {
dp[0][j] = 1
}
for i := 1; i < m; i++ {
for j := 1; j < n; j++ {
dp[i][j] = dp[i-1][j] + dp[i][j-1]
}
}
return dp[m-1][n-1]
}
fmt.Println(uniquePaths(3, 3))
medium
A. 3
B. 9
C. 6
D. 1
Solution
Step 1: Initialize dp with 1s on first row and column
First row and first column are set to 1 because only one way to reach those cells (all right or all down).
Step 2: Fill dp table using dp[i][j] = dp[i-1][j] + dp[i][j-1]
Calculate paths for each cell by summing paths from top and left cells. For 3x3 grid, dp[2][2] = 6.
Final Answer:
6 -> Option C
Quick Check:
Unique paths in 3x3 grid = 6 [OK]
Hint: Use dp[i][j] = dp[i-1][j] + dp[i][j-1] to fill grid [OK]
Common Mistakes:
Not initializing first row and column to 1
Using wrong indices in dp update
Returning wrong dp cell
4. The following Go code for Unique Paths has a bug. What is the error?
func uniquePaths(m, n int) int {
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
for i := 0; i < m; i++ {
dp[i][0] = 1
}
for j := 0; j < n; j++ {
dp[0][j] = 1
}
for i := 1; i < m; i++ {
for 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 update uses multiplication instead of addition
B. The dp slice is not initialized properly
C. The loops for initializing first row and column are swapped
D. The function returns dp[0][0] instead of dp[m-1][n-1]
Solution
Step 1: Check dp update formula
The code uses dp[i][j] = dp[i-1][j] * dp[i][j-1], which multiplies paths instead of adding them.
Step 2: Correct formula for Unique Paths
The correct formula is dp[i][j] = dp[i-1][j] + dp[i][j-1] to sum the number of ways from top and left cells.
Final Answer:
The dp update uses multiplication instead of addition -> Option A
Quick Check:
Use addition, not multiplication in dp update [OK]
Hint: Sum paths from top and left, don't multiply [OK]
Common Mistakes:
Using * instead of + in dp update
Forgetting to initialize first row/column
Returning wrong dp cell
5. Given a 4x4 grid with some obstacles represented by 1s, how would you modify the Unique Paths DP approach to count paths avoiding obstacles? Obstacles grid:
0 0 0 0
0 1 0 0
0 0 1 0
0 0 0 0
hard
A. Set dp[i][j] = 0 if obstacle at (i,j), else dp[i][j] = dp[i-1][j] + dp[i][j-1]
B. Ignore obstacles and use normal dp formula
C. Set dp[i][j] = 1 if obstacle at (i,j), else 0
D. Use multiplication of dp[i-1][j] and dp[i][j-1] for obstacles
Solution
Step 1: Identify obstacle handling in DP
When a cell has an obstacle, no path can go through it, so dp[i][j] must be 0.
Step 2: Modify dp update to skip obstacles
For cells without obstacles, dp[i][j] = dp[i-1][j] + dp[i][j-1]. For obstacles, dp[i][j] = 0.
Final Answer:
Set dp[i][j] = 0 if obstacle at (i,j), else dp[i][j] = dp[i-1][j] + dp[i][j-1] -> Option A
Quick Check:
Obstacles block paths, set dp to zero there [OK]
Hint: Zero dp at obstacles, sum paths otherwise [OK]
Common Mistakes:
Ignoring obstacles in dp calculation
Setting dp to 1 at obstacles
Multiplying dp values instead of adding
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.