Cherry Pickup LeetCode solution in JavaScript

1
var cherryPickup = function (grid) {
2
let result = 0,
3
N = grid.length,
4
cache = {},
5
cherries;
6

7
const solve = (x1, y1, x2, y2) => {
8
if (x1 === N - 1 && y1 === N - 1)
9
return grid[x1][y1] !== -1 ? grid[x1][y1] : -Infinity;
10
if (
11
x1 > N - 1 ||
12
y1 > N - 1 ||
13
x2 > N - 1 ||
14
y2 > N - 1 ||
15
grid[x1][y1] === -1 ||
16
grid[x2][y2] === -1
17
)
18
return -Infinity;
19

20
let lookup_key = `${x1}:${y1}:${x2}:${y2}`;
21
if (cache[lookup_key]) return cache[lookup_key];
22

23
if (x1 === x2 && y1 === y2) cherries = grid[x1][y1];
24
else cherries = grid[x1][y1] + grid[x2][y2];
25

26
result =
27
cherries +
28
Math.max(
29
solve(x1 + 1, y1, x2 + 1, y2),
30
solve(x1, y1 + 1, x2, y2 + 1),
31
solve(x1 + 1, y1, x2, y2 + 1),
32
solve(x1, y1 + 1, x2 + 1, y2)
33
);
34

35
cache[lookup_key] = result;
36
return result;
37
};
38

39
result = solve(0, 0, 0, 0);
40
return result > 0 ? result : 0;
41
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0