Leetcode 564.寻找最近的回文数

寻找最近的回文数

给定一个整数 n ,你需要找到与它最近的回文数(不包括自身)。

"最近的"定义为两个整数差的绝对值最小。

示例 1:

输入: "123"

输出: "121"

注意:

  1. n 是由字符串表示的正整数,其长度不超过18。
  2. 如果有多个结果,返回最小的那个。

 1 public class Solution {
 2     public String mirroring(String s) {
 3         String x = s.substring(0, (s.length()) / 2);
 4         return x + (s.length() % 2 == 1 ? s.charAt(s.length() / 2) : "") + new StringBuilder(x).reverse().toString();
 5     }
 6     public String nearestPalindromic(String n) {
 7         if (n.equals("1"))
 8             return "0";
 9 
10         String a = mirroring(n);
11         long diff1 = Long.MAX_VALUE;
12         diff1 = Math.abs(Long.parseLong(n) - Long.parseLong(a));
13         if (diff1 == 0)
14             diff1 = Long.MAX_VALUE;
15 
16         StringBuilder s = new StringBuilder(n);
17         int i = (s.length() - 1) / 2;
18         while (i >= 0 && s.charAt(i) == '0') {
19             s.replace(i, i + 1, "9");
20             i--;
21         }
22         if (i == 0 && s.charAt(i) == '1') {
23             s.delete(0, 1);
24             int mid = (s.length() - 1) / 2;
25             s.replace(mid, mid + 1, "9");
26         } else
27             s.replace(i, i + 1, "" + (char)(s.charAt(i) - 1));
28         String b = mirroring(s.toString());
29         long diff2 = Math.abs(Long.parseLong(n) - Long.parseLong(b));
30 
31 
32         s = new StringBuilder(n);
33         i = (s.length() - 1) / 2;
34         while (i >= 0 && s.charAt(i) == '9') {
35             s.replace(i, i + 1, "0");
36             i--;
37         }
38         if (i < 0) {
39             s.insert(0, "1");
40         } else
41             s.replace(i, i + 1, "" + (char)(s.charAt(i) + 1));
42         String c = mirroring(s.toString());
43         long diff3 = Math.abs(Long.parseLong(n) - Long.parseLong(c));
44 
45         if (diff2 <= diff1 && diff2 <= diff3)
46             return b;
47         if (diff1 <= diff3 && diff1 <= diff2)
48             return a;
49         else
50             return c;
51     }
52 }

猜你喜欢

转载自www.cnblogs.com/kexinxin/p/10381384.html