Last updated on October 9th, 2024 at 05:54 pm
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
Topics
String
Companies
Yelp
Level of Question
Hard
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.
1. 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]); } };
2. 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]++; } }
3. 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; }
4. 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)