• 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 }
  • 相关阅读:
    架构中那些需要注意的事儿
    谈谈测试环境管理与实践
    响应式布局
    flex布局
    crontab定时任务
    SpringMVC Json自定义序列化和反序列化
    Tensorflow 使用TPU训练
    使用Selenium从IEEE与谷歌学术批量爬取BibTex文献引用
    Pyecharts——Python高级可视化
    Python图像处理库——PIL
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10381384.html
Copyright © 2020-2023  润新知