Bird
Raised Fist0
DSA Goprogramming~10 mins

Unique Paths in Grid DP in DSA Go - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the DP table with zeros.

DSA Go
dp := make([][]int, m)
for i := 0; i < m; i++ {
    dp[i] = make([]int, [1])
}
Drag options to blanks, or click blank then click option'
An
Bm
C0
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Using m instead of n for the inner slice length.
Initializing dp with zero length slices.
2fill in blank
medium

Complete the code to set the number of ways to reach the first cell.

DSA Go
dp[0][0] = [1]
Drag options to blanks, or click blank then click option'
A1
B0
C-1
Dm
Attempts:
3 left
💡 Hint
Common Mistakes
Setting dp[0][0] to 0, which means no paths start there.
Using negative or invalid values.
3fill in blank
hard

Fix the error in the nested loops to correctly fill the DP table.

DSA Go
for i := 0; i < m; i++ {
    for j := 0; j < [1]; j++ {
        if i == 0 && j == 0 {
            continue
        }
        up := 0
        left := 0
        if i > 0 {
            up = dp[i-1][j]
        }
        if j > 0 {
            left = dp[i][j-1]
        }
        dp[i][j] = up + left
    }
}
Drag options to blanks, or click blank then click option'
Am
Bj
Ci
Dn
Attempts:
3 left
💡 Hint
Common Mistakes
Using m for both loops causing index errors.
Using loop variables incorrectly.
4fill in blank
hard

Fill both blanks to return the total unique paths from top-left to bottom-right.

DSA Go
return dp[[1]-1][[2]-1]
Drag options to blanks, or click blank then click option'
Am
Bn
C0
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 or 1 instead of m-1 or n-1.
Mixing up row and column indices.
5fill in blank
hard

Fill all three blanks to create a map of unique paths for each cell with conditions.

DSA Go
for i := 0; i < m; i++ {
    for j := 0; j < n; j++ {
        if i == 0 && j == 0 {
            dp[i][j] = [1]
        } else {
            up := 0
            left := 0
            if i > 0 {
                up = dp[i-1][j]
            }
            if j > 0 {
                left = dp[i][j-1]
            }
            dp[i][j] = up [2] left
        }
    }
}
Drag options to blanks, or click blank then click option'
A1
B+
C-
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using subtraction or multiplication instead of addition.
Setting start cell to 0.

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

  1. 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.
  2. Step 2: Identify the meaning of "Unique Paths"

    Unique paths means counting distinct ways, not shortest or maximum sum paths.
  3. 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
  4. 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?
easy
A. dp := [][]int{} dp = append(dp, make([]int, m)) dp = append(dp, make([]int, n))
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

  1. 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.
  2. 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.
  3. Final Answer:

    dp := make([][]int, m) for i := range dp { dp[i] = make([]int, n) } -> Option D
  4. 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

  1. 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).
  2. 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.
  3. Final Answer:

    6 -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    The dp update uses multiplication instead of addition -> Option A
  4. 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

  1. 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.
  2. 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.
  3. 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
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard