Skip to content

Commit 99c1c16

Browse files
authored
Update 564-find-the-closest-palindrome.js
1 parent 97a9003 commit 99c1c16

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

564-find-the-closest-palindrome.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,85 @@
1+
/**
2+
* @param {string} n
3+
* @return {string}
4+
*/
5+
const nearestPalindromic = function(n) {
6+
const {floor} = Math
7+
const str = num => `${num}`
8+
const a = makeSmaller(n), b = makeGreater(n)
9+
// console.log(a, b)
10+
if(delta(b, n) >= delta(n, a)) {
11+
return a
12+
}
13+
return b
14+
15+
function makeGreater(num) {
16+
const n = num.length
17+
const arr = num.split('')
18+
for(let i = 0, j = n - 1; i <= j;) {
19+
arr[j] = arr[i]
20+
i++
21+
j--
22+
}
23+
const tmp = arr.join('')
24+
// console.log(tmp)
25+
if(tmp > num) return tmp
26+
let carry = 1
27+
28+
for(let i = floor((n - 1) / 2); i >= 0; i--) {
29+
const cur = +arr[i] + carry
30+
if(cur <= 9) {
31+
arr[i] = str(cur)
32+
carry = 0
33+
} else {
34+
arr[i] = '0'
35+
carry = 1
36+
}
37+
arr[n - 1 - i] = arr[i]
38+
}
39+
if(carry) {
40+
const ta = Array(n + 1).fill('0')
41+
ta[0] = '1'
42+
ta[ta.length - 1] = '1'
43+
return ta.join('')
44+
}
45+
return arr.join('')
46+
}
47+
48+
function makeSmaller(num) {
49+
const n = num.length
50+
const arr = num.split('')
51+
for(let i = 0, j = n - 1; i <= j;) {
52+
arr[j] = arr[i]
53+
i++
54+
j--
55+
}
56+
const tmp = arr.join('')
57+
if(tmp < num) return tmp
58+
let carry = 1
59+
for(let i = floor((n - 1) / 2); i >= 0; i--) {
60+
const cur = +arr[i] - carry
61+
if(cur >= 0) {
62+
arr[i] = str(cur)
63+
carry = 0
64+
} else {
65+
arr[i] = '9'
66+
carry = 1
67+
}
68+
arr[n - 1 - i] = arr[i]
69+
}
70+
if(arr[0] === '0' && n > 1) {
71+
return '9'.repeat(n - 1)
72+
}
73+
return arr.join('')
74+
}
75+
function delta(a, b) {
76+
return BigInt(a) - BigInt(b)
77+
}
78+
};
79+
80+
// another
81+
82+
183
/**
284
* @param {bigint | string} n
385
* @return {string}

0 commit comments

Comments
 (0)