美文网首页
面试题:最近的回文数

面试题:最近的回文数

作者: 一叶书生 | 来源:发表于2020-05-08 10:55 被阅读0次

public String nearestPalindromic(String n) {

    // 处理特殊值 1位数

    if (n.length() == 1) {

        return String.valueOf(Math.abs(Long.parseLong(n) - 1));

    }

    // 原始数据

    Long num = Long.parseLong(n);

    // 原始数据直接 转回文

    Long huiwen = Long.parseLong(huiwen(n));

    // 从中间点数字 +1 再转回文 比如 9999 -> 10099 -> 10001

    Long huiwenAdd1 = Long.parseLong(midAdd1(n));

    // 从中间点数字 -1 再转回文 比如 10001 -> 9901 -> 9999

    Long huiwenMin1 = Long.parseLong(midMin1(n));

    // 找寻差值最小的数字

    Long res = 0L;

    Long abs = Long.MAX_VALUE;

    if (!huiwen.equals(num)) {

        res = huiwen;

        abs = Math.abs(huiwen - num);

    }

    long add1Abs = huiwenAdd1 - num;

    if (add1Abs < abs) {

        abs = add1Abs;

        res = huiwenAdd1;

    }

    long min1Abs = num - huiwenMin1;

    if (min1Abs <= abs) {

        abs = min1Abs;

        res = huiwenMin1;

    }

    return res.toString();

}

public String midAdd1(String n) {

    char[] chars = n.toCharArray();

    int mid = chars.length % 2 == 0 ? chars.length / 2 - 1 : chars.length / 2;

    for (int i = mid; i > -1; i--) {

        if (chars[i] == '9') {

            chars[i] = '0';

        } else {

            chars[i] += 1;

            break;

        }

    }

    if (chars[0] == '0') {

        char[] newChars = new char[chars.length + 1];

        newChars[0] = '1';

        System.arraycopy(chars, 0, newChars, 1, chars.length);

        return huiwen(new String(newChars));

    } else {

        return huiwen(new String(chars));

    }

}

public String midMin1(String n) {

    char[] chars = n.toCharArray();

    int mid = chars.length % 2 == 0 ? chars.length / 2 - 1 : chars.length / 2;

    for (int i = mid; i > -1; i--) {

        if (chars[i] == '0') {

            chars[i] = '9';

        } else {

            chars[i] -= 1;

            break;

        }

    }

    if (chars[0] == '0') {

        char[] newChars = new char[chars.length - 1];

        newChars[0] = '9';

        System.arraycopy(chars, 1, newChars, 1, chars.length - 2);

        return huiwen(new String(newChars));

    } else {

        return huiwen(new String(chars));

    }

}

public String huiwen(String n) {

    char[] chars = n.toCharArray();

    int mid = chars.length / 2;

    for (int i = 0; i < mid; i++) {

        chars[chars.length - 1 - i] = chars[i];

    }

    return new String(chars);

}

————————————————

原文链接:https://blog.csdn.net/zhangdx001/article/details/105938049/

相关文章

网友评论

      本文标题:面试题:最近的回文数

      本文链接:https://www.haomeiwen.com/subject/lmgxnhtx.html