Bird
Raised Fist0
DSA Goprogramming~5 mins

Unique Paths in Grid DP in DSA Go - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
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)
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
Which moves are allowed in the Unique Paths problem?
ALeft and Up
BAll directions
CDiagonal only
DRight and Down
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)
If the grid size is 3x3, how many unique paths are there from top-left to bottom-right?
A3
B9
C6
D12
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

      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