zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Systemd 指令
    2018年书单
    2017年书单
    Centos7 Devstack [Rocky] 重启后无法联网
    kvm虚拟机操作相关命令及虚拟机和镜像密码修改
    负载均衡原理-转
    用配置文件里面的参数值替换yaml模板中的变量值【python】
    linux工具之sar
    利用系统缓存优化程序的运行效率
    Elasticsearch单机部署
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10381384.html
Copyright © 2011-2022 走看看