Find the Closest Palindrome LeetCode solution in Java

1
class Solution {
2
static long pow(long base, long exp) {
3
long ans = 1;
4
for (; exp != 0; ) {
5
if ((exp & 1) == 1) {
6
ans *= base;
7
}
8
base *= base;
9
exp >>= 1;
10
}
11
return ans;
12
}
13

14
public String nearestPalindromic(String n) {
15
long num = Long.parseLong(n);
16
if (num <= 10) {
17
return String.valueOf(num - 1);
18
}
19
long comp[] = new long[5];
20
comp[0] = pow(10, n.length() - 1) - 1;
21
comp[1] = pow(10, n.length()) + 1;
22
int mid = (n.length() + 1) / 2;
23
long half = Long.parseLong(n.substring(0, mid));
24
long pref[] = {half, half + 1, half - 1};
25
for (int i = 0; i < 3; i++) {
26
StringBuilder st = new StringBuilder(String.valueOf(pref[i]));
27
if (n.length() % 2 == 1) st.deleteCharAt(st.length() - 1);
28
st.reverse();
29
comp[i + 2] = Long.parseLong(String.valueOf(pref[i]) + st.toString());
30
}
31
long min = Long.MAX_VALUE;
32
long ans = Long.MAX_VALUE;
33
for (int i = 0; i < 5; i++) {
34
long dif = Math.abs(num - comp[i]);
35
if (dif != 0 && min > dif) {
36
min = dif;
37
ans = comp[i];
38
} else if (min == dif) ans = Math.min(ans, comp[i]);
39
}
40
return String.valueOf(ans);
41
}
42
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0