let dp =
new
Array(200);
for
(let i = 0; i < 200; i++) {
dp[i] =
new
Array(20);
for
(let j = 0; j < 20; j++) {
dp[i][j] =
new
Array(500);
for
(let k = 0; k < 500; k++) {
dp[i][j][k] =
new
Array(20).fill(-1);
}
}
}
function
recur(i, j, k, l, a)
{
if
(i === a.length) {
return
k;
}
if
(dp[i][j][k + 180][l] !== -1) {
return
dp[i][j][k + 180][l];
}
let ans = 0;
let maxValue = j === 1 ? Number(a[i]) : 9;
if
(l === 0) {
for
(let digit = 0; digit <= maxValue; digit++) {
if
(digit === maxValue) {
ans += recur(i + 1, j, k + digit, 1, a);
}
else
if
(digit !== 0) {
ans += recur(i + 1, 0, k + digit, 1, a);
}
else
{
ans += recur(i + 1, 0, k, 0, a);
}
}
}
else
{
for
(let digit = 0; digit <= maxValue; digit++) {
if
(digit === maxValue) {
ans += recur(i + 1, j, k + (l === 1 ? -digit : digit), l === 1 ? 2 : 1, a);
}
else
{
ans += recur(i + 1, 0, k + (l === 1 ? -digit : digit), l === 1 ? 2 : 1, a);
}
}
}
return
dp[i][j][k + 180][l] = ans;
}
function
findfxfromLtoR(A, B) {
dp.forEach(dp1 => dp1.forEach(dp2 => dp2.forEach(dp3 => dp3.fill(-1))));
A--;
let L = A.toString();
let R = B.toString();
let ans1 = recur(0, 1, 0, 0, L);
dp.forEach(dp1 => dp1.forEach(dp2 => dp2.forEach(dp3 => dp3.fill(-1))));
let ans2 = recur(0, 1, 0, 0, R);
return
ans2 - ans1;
}
L = 10;
R = 15;
console.log(findfxfromLtoR(L, R) +
"<br>"
);
L1 = 101;
R1 = 105;
console.log(findfxfromLtoR(L1, R1));