Here, We see Find the Closest Palindrome LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
![Find the Closest Palindrome LeetCode Solution](https://i0.wp.com/totheinnovation.com/wp-content/uploads/2024/02/LeetCode-Problem-Solution.png?resize=200%2C200&ssl=1)
Find the Closest Palindrome LeetCode Solution
Table of Contents
Problem Statement
Given a string n
representing an integer, return the closest integer (not including itself), which is a palindrome. If there is a tie, return the smaller one.
The closest is defined as the absolute difference minimized between two integers.
Example 1:
Input: n = “123”
Output: “121”
Example 2:
Input: n = “1”
Output: “0”
Explanation: 0 and 2 are the closest palindromes but we return the smallest which is 0.
Find the Closest Palindrome Solution C++
class Solution {
public:
string nearestPalindromic(string n) {
if (n.size() == 1) return string(1, n[0] == '0' ? '1' : n[0] - 1);
long num = stol(n);
long p1 = static_cast<long>(pow(10, n.size() - 1) - 1l);
long p2 = static_cast<long>(pow(10, n.size()) + 1l);
int l = 0, r = n.size() - 1;
bool notPalin = false;
while (l < r) {
if (n[l] != n[r]) notPalin = true;
n[r--] = n[l++];
}
long p3 = notPalin ? stol(n) : 0;
string temp = n.substr(0, r + 1); // left half, including the middle if size is odd
temp = to_string(stol(temp) + 1l); // add one to the middle digit
string temp2{temp};
if (n.size() % 2 == 1) temp2.pop_back();
reverse(temp2.begin(), temp2.end());
temp += temp2;
long p4 = stol(temp);
temp = n.substr(0, r + 1);
temp = to_string(stol(temp) - 1l);
temp2 = temp;
if (n.size() % 2 == 1) temp2.pop_back();
reverse(temp2.begin(), temp2.end());
temp += temp2;
long p5 = stol(temp);
array<long, 5> arr{p1, p2, p3, p4, p5};
sort(arr.begin(), arr.end(), [&num](const long& n1, const long& n2) {
auto diff1 = abs(n1 - num), diff2 = abs(n2 - num);
return diff1 == diff2 ? n1 < n2 : diff1 < diff2;
});
return to_string(arr[0]);
}
};
Code language: PHP (php)
Find the Closest Palindrome Solution Java
class Solution {
public String nearestPalindromic(String n) {
long N = Long.parseLong(n), S = previous(String.valueOf(N-1).toCharArray()), L = next(String.valueOf(N+1).toCharArray());
return String.valueOf(L - N < N - S ? L : S);
}
private long previous(char[] s) {
for(int i = 0, n = s.length; i < (n >> 1); i++) {
while(s[i] != s[n - 1 - i]) {
decrement(s, n - 1 - i);
if(s[0] == '0') return Long.parseLong(new String(s));
}
}
return Long.parseLong(new String(s));
}
private void decrement(char[] s, int i) {
while(s[i] == '0') s[i--] = '9';
s[i]--;
}
private long next(char[] s) {
for(int i = 0, n = s.length; i < (n >> 1); i++) {
while(s[i] != s[n - 1 - i]) {
increment(s, n - 1 - i);
}
}
return Long.parseLong(new String(s));
}
private void increment(char[] s, int i) {
while(s[i] == '9') s[i--] = '0';
s[i]++;
}
}
Code language: JavaScript (javascript)
Find the Closest Palindrome Solution JavaScript
var nearestPalindromic = function (n) {
const bit = BigInt(n);
const num = [bit - 1n, bit + 1n];
while (true) {
const d1 = getDistance(num[0]);
if (d1 === 0) break;
num[0] -= BigInt(d1);
}
while (true) {
const d2 = getDistance(num[1]);
if (d2 === 0) break;
num[1] += BigInt(d2);
}
return bit - num[0] <= num[1] - bit ? String(num[0]) : String(num[1])
};
function getDistance(n) {
const s = n + '';
let i = 0;
let j = s.length - 1;
while (i < j) {
if (s[i++] !== s[j--]) return 10 ** (i - 1);
}
return 0;
}
Code language: JavaScript (javascript)
Find the Closest Palindrome Solution Python
class Solution(object):
def nearestPalindromic(self, n):
if n == '0':
return '1'
if (n == '10') or (n == '11'):
return '9'
size = len(n)
if size == 1:
return str(int(n)-1)
p = size//2
m = n[p] if (size%2 == 1) else ''
s = n[:p]
res0 = s + m + s[::-1]
sd = str(int(s+m)-1)
md = ''
if m!='':
md = sd[-1]
sd = sd[:-1]
if len(sd+md)!=(len(s)+len(m)):
if m!='':
sd = sd + md
md = ''
else:
md = '9'
res1 = sd + md + sd[::-1]
sp = str(int(s+m)+1)
mp = ''
if m!='':
mp = sp[-1]
sp = sp[:-1]
if len(sp+mp)!=(len(s)+len(m)):
if m!='':
mp = ''
else:
mp = '0'
sp = sp[:-1]
res2 = sp + mp + sp[::-1]
res_list = sorted([int(r) for r in [res0, res1, res2] if r!=n])
res_diff = [abs(int(r)-int(n)) for r in res_list]
res = res_list[res_diff.index(min(res_diff))]
return str(res)