zoukankan      html  css  js  c++  java
  • LeetCode 564. Find the Closest Palindrome

    原题链接在这里:https://leetcode.com/problems/find-the-closest-palindrome/

    题目:

    Given an integer n, find the closest integer (not including itself), which is a palindrome.

    The 'closest' is defined as absolute difference minimized between two integers.

    Example 1:

    Input: "123"
    Output: "121"

    Note:

    1. The input n is a positive integer represented by string, whose length will not exceed 18.
    2. If there is a tie, return the smaller one as answer.

    题解:

    First find all the candidates, add "9999..999", "10000..0001".

    Add first half, + reverse of (first half). 

    e.g. 12567, its first half is 125, the candiates couldbe 12521, 12421, 12621.

    Then check all the candidates and find the closest one.

    Time Complexity: O(mn). m = is candidates list size. n is candiate length.

    Space: O(mn).

    AC Java:

     1 class Solution {
     2     public String nearestPalindromic(String n) {
     3         if(n == null || n.length() == 0){
     4             return n;
     5         }
     6         
     7         int len = n.length();
     8         if(len == 1){
     9             int val = Integer.valueOf(n);
    10             return val > 0 ? "" + (val - 1) : "" + (val + 1);
    11         }
    12         
    13         List<String> cans = new ArrayList<>();
    14         
    15         cans.add(allNine(len - 1));
    16         cans.add(oneZero(len + 1));
    17         
    18         int halfLen = (len + 1) / 2;
    19         String sub = n.substring(0, halfLen);
    20         if(len % 2 == 1){
    21             cans.add(sub + new StringBuilder(sub).deleteCharAt(halfLen - 1).reverse().toString());
    22             long halfVal = Long.valueOf(sub);
    23             long plusOne = halfVal + 1;
    24             cans.add("" + plusOne + new StringBuilder("" + plusOne / 10).reverse().toString());
    25             long minusOne = halfVal - 1;
    26             if(minusOne > 0){
    27                 cans.add( "" + minusOne + new StringBuilder("" + minusOne / 10).reverse().toString());
    28             }
    29         }else{
    30             cans.add(sub + new StringBuilder(sub).reverse().toString());
    31             long halfVal = Long.valueOf(sub);
    32             long plusOne = halfVal + 1;
    33             cans.add("" + plusOne + new StringBuilder("" + plusOne).reverse().toString());
    34             long minusOne = halfVal - 1;
    35             if(minusOne > 0){
    36                 cans.add("" + minusOne + new StringBuilder("" + minusOne).reverse().toString());
    37             }
    38         }
    39         
    40         long diff = Long.MAX_VALUE;
    41         String res = "";
    42         long nValue = Long.valueOf(n);
    43         for(String can : cans){
    44             if(can.equals(n)){
    45                 continue;
    46             }
    47             
    48             long canValue = Long.valueOf(can);
    49             if(Math.abs(canValue - nValue) < diff){
    50                 diff = Math.abs(canValue - nValue);
    51                 res = can;
    52             }else if(Math.abs(canValue - nValue) == diff && (res.length() == 0 || canValue < Long.valueOf(res))){
    53                 res = can;
    54             }
    55         }
    56         
    57         return res;
    58     }
    59     
    60     private String allNine(int len){
    61         char [] charArr = new char[len];
    62         Arrays.fill(charArr, '9');
    63         return new String(charArr);
    64     }
    65     
    66     private String oneZero(int len){
    67         char [] charArr = new char[len];
    68         Arrays.fill(charArr, '0');
    69         charArr[0] = '1';
    70         charArr[len - 1] = '1';
    71         return new String(charArr);
    72     }
    73 }
  • 相关阅读:
    配置python库源为清华源
    ubuntu下安装使用jupyter
    《在下雪天气里和女朋友在一起就会有种很特别的氛围,我很喜欢》梗图
    ubuntu安装cuda、cudnn和nvidia-docker
    jreg视频内容整理
    【北邮人论坛帖子备份】给考公同学的建议。如今我流的泪都是当年脑子进的水
    拉取docker容器后启动容器的脚本
    多个git账户ssh密钥配置
    【北邮人论坛帖子备份】【FAQ】给今年国企求职学弟学妹的一点建议
    nui-app记录不明白的属性
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12151375.html
Copyright © 2011-2022 走看看