Find the Closest Palindrome LeetCode solution in JavaScript

1
var nearestPalindromic = function (n) {
2
//special case return immediately
3
if (n.length === 1) {
4
return String(n - 1);
5
}
6

7
const gen99 = (len) => {
8
return "9".repeat(len);
9
};
10
const gen101 = (len) => {
11
return "1" + "0".repeat(len - 1) + "1";
12
};
13

14
let case1 = gen99(n.length - 1);
15
let case2 = gen101(n.length - 1);
16
let case3 = gen99(n.length);
17
let case4 = gen101(n.length);
18

19
let tempPalindrome = "";
20
let tempPalindromeRev = "";
21
let startCode = 0;
22
let endCode = n.length - 1;
23
while (endCode - startCode > 1) {
24
tempPalindrome = tempPalindrome + n[startCode];
25
tempPalindromeRev = n[startCode] + tempPalindromeRev;
26
startCode += 1;
27
endCode -= 1;
28
}
29
const addCenterStr = (add) => {
30
if (n.length % 2 !== 0) {
31
return tempPalindrome + (Number(n[startCode]) + add);
32
} else {
33
return (
34
tempPalindrome +
35
(Number(n[startCode]) + add) +
36
(Number(n[startCode]) + add)
37
);
38
}
39
};
40
let case5 = addCenterStr(0) + tempPalindromeRev;
41
let case6 = addCenterStr(-1) + tempPalindromeRev;
42
let case7 = addCenterStr(1) + tempPalindromeRev;
43

44
//Find smallest difference ans
45
const list = [case1, case2, case3, case4, case5, case6, case7];
46
let tempDiff = null;
47
let ans = "";
48
for (let i of list) {
49
if (i != n) {
50
let diff = Math.abs(n - i);
51
if (diff == tempDiff && Number(i) < Number(ans)) {
52
ans = i;
53
}
54
if (diff < tempDiff || !tempDiff) {
55
tempDiff = diff;
56
ans = i;
57
}
58
}
59
}
60
return String(ans);
61
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0