码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 564.寻找最近的回文数

时间:2019-02-15 01:11:17      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:size   long   输入   near   mamicode   com   class   定义   replace   

寻找最近的回文数

给定一个整数 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 }

 

Leetcode 564.寻找最近的回文数

标签:size   long   输入   near   mamicode   com   class   定义   replace   

原文地址:https://www.cnblogs.com/kexinxin/p/10381384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!