Skip to content

Commit 4ef906f

Browse files
authored
Update 1977-number-of-ways-to-separate-numbers.js
1 parent 4ccc737 commit 4ef906f

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed
Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
1-
function numberOfCombinations( num) {
2-
let dp = Array(3501).fill(0), dpp=Array(3501).fill(0), pf=Array(3501).fill(0), n = num.length, mod = 1000000007;
1+
/**
2+
* @param {string} num
3+
* @return {number}
4+
*/
5+
function numberOfCombinations(num) {
6+
let dpArr = Array(3501).fill(0),
7+
dp = Array(3501).fill(0),
8+
prefix = Array(3501).fill(0),
9+
n = num.length,
10+
mod = 1e9 + 7
311
for (let l = 1; l <= n; ++l) {
4-
dpp[0] = 1;
5-
for (let i = n; i - l > 0; --i)
6-
pf[i - 1] = num[i - 1 - l] == num[i - 1] ? pf[i] + 1 : 0;
7-
for (let i = 0; i < n; ++i) {
8-
dp[i + 1] = dpp[i + 1];
9-
if (l <= i + 1 && num[i + 1 - l] != '0') {
10-
if (i + 1 - 2 * l >= 0 && (pf[i + 1 - l] >= l || num[i + 1 - l + pf[i + 1 - l]] > num[i + 1 - 2 * l + pf[i + 1 - l]]))
11-
dp[i + 1] = (dp[i + 1] + dp[i + 1 - l]) % mod;
12-
else
13-
dp[i + 1] = (dp[i + 1] + dpp[i + 1 - l]) % mod;
14-
}
12+
dp[0] = 1
13+
for (let i = n; i - l > 0; --i)
14+
prefix[i - 1] = num[i - 1 - l] === num[i - 1] ? prefix[i] + 1 : 0
15+
for (let i = 0; i < n; ++i) {
16+
dpArr[i + 1] = dp[i + 1]
17+
if (l <= i + 1 && num[i + 1 - l] != '0') {
18+
if (
19+
i + 1 - 2 * l >= 0 &&
20+
(prefix[i + 1 - l] >= l ||
21+
num[i + 1 - l + prefix[i + 1 - l]] > num[i + 1 - 2 * l + prefix[i + 1 - l]])
22+
)
23+
dpArr[i + 1] = (dpArr[i + 1] + dpArr[i + 1 - l]) % mod
24+
else dpArr[i + 1] = (dpArr[i + 1] + dp[i + 1 - l]) % mod
1525
}
16-
let tmp = dpp
17-
dpp = dp
18-
dp = tmp
19-
}
20-
return dpp[n];
26+
}
27+
const tmp = dp
28+
dp = dpArr
29+
dpArr = tmp
30+
}
31+
return dp[n]
2132
}

0 commit comments

Comments
 (0)