Advertisement
Guest User

564. Find the Closest Palindrome

a guest
Jan 21st, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.70 KB | None | 0 0
  1. class Solution {
  2.     // Time: O(n), Space: O(n)
  3.     public String nearestPalindromic(String n) {
  4.         if (n == null || n.length() == 0) {
  5.             return n;
  6.         }
  7.        
  8.         int len = n.length();
  9.         char[] tmp = n.toCharArray();
  10.         int i=0;
  11.         int j=len-1;
  12.         while (i < j) {
  13.             tmp[j] = tmp[i];
  14.             i++;
  15.             j--;
  16.         }
  17.        
  18.         int midElem = tmp[(len-1)/2] - '0';
  19.         long orig = Long.parseLong(n);
  20.         long diff = Long.MAX_VALUE;
  21.         long res = orig;
  22.        
  23.         for (int k=Math.min(9, midElem+1); k>=Math.max(0, midElem-1); k--) {
  24.             if (len%2 == 0) {
  25.                 tmp[len/2] = (char) (k + '0');
  26.             }
  27.             tmp[(len-1)/2] = (char) (k + '0');
  28.             long val = Long.parseLong(new String(tmp));
  29.             if (val == orig) {
  30.                 continue;
  31.             }
  32.             if (diff >= Math.abs(orig - val)) {
  33.                 diff = Math.abs(orig - val);
  34.                 res = val;
  35.             }
  36.         }
  37.        
  38.         if (midElem == 0 || midElem == 1 || midElem == 9) {
  39.             long val9 = 0;
  40.             long val1 = 1;
  41.             for (int k=0; k<len-1; k++) {
  42.                 val9 = val9*10 + 9;
  43.                 val1 = val1*10;
  44.             }
  45.             val1 = val1*10 + 1;
  46.  
  47.             if (orig != val9 && diff >= Math.abs(orig - val9)) {
  48.                 diff = Math.abs(orig - val9);
  49.                 res = val9;
  50.             }
  51.  
  52.             if (orig != val1 && diff >= Math.abs(orig - val1)) {
  53.                 diff = Math.abs(orig - val1);
  54.                 res = val1;
  55.             }
  56.         }
  57.        
  58.         return String.valueOf(res);
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement