Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Cherry Pickup

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "741" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are given an n x n grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through, 1 means the cell contains a cherry that you can pick up and pass through, or -1 means the cell contains a thorn that blocks your way. Return the maximum number of cherries you can collect by following the rules below: Starting at the position (0, 0) and reaching (n - 1, n - 1) by moving right or down through valid path cells (cells with value 0 or 1). After reaching (n - 1, n - 1), returning to (0, 0) by moving left or up through valid path cells. When passing through a path cell containing a cherry, you pick it up, and the cell becomes an empty cell 0. If there is no valid path between (0, 0) and (n - 1, n - 1), then no cherries can be collected. Example 1: Input: grid = [[0,1,-1],[1,0,-1],[1,1,1]] Output: 5 Explanation: The player started at (0, 0) and went down, down, right right to reach (2, 2). 4 cherries were picked up during this single trip, and the matrix becomes [[0,1,-1],[0,0,-1],[0,0,0]]. Then, the player went left, up, up, left to return home, picking up one more cherry. The total number of cherries picked up is 5, and this is the maximum possible. Example 2: Input: grid = [[1,1,-1],[1,-1,1],[-1,1,1]] Output: 0 Constraints: n == grid.length n == grid[i].length 1 <= n <= 50 grid[i][j] is -1, 0, or 1. grid[0][0] != -1 grid[n - 1][n - 1] != -1

Explanation

Here's the breakdown of the approach, complexity, and code:

  • Dynamic Programming with State Compression: Instead of considering two separate trips, we model two people moving simultaneously from (0,0) to (n-1, n-1). The state dp[r1][c1][c2] represents the maximum cherries collected when person 1 is at (r1, c1) and person 2 is at (r2, c2). Note that r1 + c1 == r2 + c2 always holds, so r2 can be derived.
  • Avoid Overlapping Paths: When both persons reach the same cell, we add the cherry only once. Handle the case where a cell had a cherry and was picked.
  • Base Case and Transitions: The base case is dp[0][0][0]. Iterate through possible moves and update dp to maximize cherry collection.

  • Complexity: O(N^3) time, O(N^3) space, where N is the dimension of the grid.

Code

    def cherryPickup(grid):
    n = len(grid)
    dp = {}

    def solve(r1, c1, c2):
        r2 = r1 + c1 - c2

        if (r1, c1, c2) in dp:
            return dp[(r1, c1, c2)]

        if r1 == n or c1 == n or r2 == n or c2 == n or \
           grid[r1][c1] == -1 or grid[r2][c2] == -1:
            return float('-inf')

        if r1 == n - 1 and c1 == n - 1:
            return grid[r1][c1]

        if r2 == n - 1 and c2 == n - 1:
            return grid[r1][c1]

        cherries = grid[r1][c1]
        if r1 != r2 or c1 != c2:
            cherries += grid[r2][c2]

        ans = max(
            solve(r1 + 1, c1, c2 + 1),
            solve(r1 + 1, c1, c2),
            solve(r1, c1 + 1, c2 + 1),
            solve(r1, c1 + 1, c2)
        )

        dp[(r1, c1, c2)] = cherries + ans
        return dp[(r1, c1, c2)]

    result = solve(0, 0, 0)
    return max(0, result)

More from this blog

C

Chatmagic blog

2894 posts