1
const MOD = 10 ** 9 + 7;2
var numberOfCombinations = function (num) {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;10
const partialCompare = (i, j) => {11
if (i === j || allSameFlag) {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);23
const idx = partialCompare(i + 1, j + 1);24
return idx === 0 ? 0 : Math.abs(idx) - 1 >= j ? 0 : idx;28
let ans = counts[0][n];29
for (let j = n - 1; j > 0; j--) {32
for (let i = 0; i < j; i++) {36
(k - j === j - i && partialCompare(i, j) <= 0)38
total = (total + counts[j][k]) % MOD;44
ans = (ans + counts[0][j]) % MOD;