Maximize Score After N Operations LeetCode solution in JavaScript

1
var maxScore = function (nums) {
2
function gcd(a, b) {
3
if (!b) return a;
4
return gcd(b, a % b);
5
}
6

7
const memo = new Map();
8

9
function recurse(arr, num1, op) {
10
if (!arr.length) return 0;
11

12
const key = arr.join() + num1;
13
if (memo.has(key)) return memo.get(key);
14

15
let max = 0;
16

17
for (let i = 0; i < arr.length; i++) {
18
const nextArr = [...arr.slice(0, i), ...arr.slice(i + 1)];
19

20
if (num1) {
21
const currGCD = gcd(num1, arr[i]);
22
const rest = recurse(nextArr, null, op + 1);
23
max = Math.max(max, op * currGCD + rest);
24
} else {
25
const rest = recurse(nextArr, arr[i], op);
26
max = Math.max(max, rest);
27
}
28
}
29
memo.set(key, max);
30
return max;
31
}
32
return recurse(nums, null, 1);
33
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0