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 }
  • 相关阅读:
    Oracle学习(十四):管理用户安全性
    Android在发送带有附件的邮件
    Naive Bayes Classification
    java大全经典的书面采访
    安卓实现实时视频传输
    TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义
    SYN(synchronous)TCP/IP
    面向对象、面向过程与哲学
    面向过程和面向对象的哲学基础
    面向过程
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10381384.html
Copyright © 2011-2022 走看看