Number of Ways to Separate Numbers LeetCode solution in JavaScript

1
const MOD = 10 ** 9 + 7;
2
var numberOfCombinations = function (num) {
3
const n = num.length;
4
const counts = Array.from({ length: n }, () => new Array(n + 1).fill(0));
5
const allSameFlag = num.split("").every((c) => c === num[0]);
6
for (let i = 0; i < n; i++) {
7
counts[i][n] = num[i] !== "0" ? 1 : 0;
8
}
9

10
const partialCompare = (i, j) => {
11
if (i === j || allSameFlag) {
12
return 0;
13
} else if (num[i] !== num[j]) {
14
return num[i] > num[j] ? i + 1 : -(i + 1);
15
} else if (2 * j - i === n || 2 * j - i === n - 1) {
16
for (let k = 0; k < j - i; k++) {
17
if (num[i + k] !== num[j + k]) {
18
return num[i + k] > num[j + k] ? i + k : -(i + k + 1);
19
}
20
}
21
return 0;
22
} else {
23
const idx = partialCompare(i + 1, j + 1);
24
return idx === 0 ? 0 : Math.abs(idx) - 1 >= j ? 0 : idx;
25
}
26
};
27

28
let ans = counts[0][n];
29
for (let j = n - 1; j > 0; j--) {
30
let k = n,
31
total = 0;
32
for (let i = 0; i < j; i++) {
33
if (num[i] !== "0") {
34
while (
35
k - j > j - i ||
36
(k - j === j - i && partialCompare(i, j) <= 0)
37
) {
38
total = (total + counts[j][k]) % MOD;
39
k--;
40
}
41
counts[i][j] = total;
42
}
43
}
44
ans = (ans + counts[0][j]) % MOD;
45
counts.pop();
46
}
47
return ans;
48
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0