经典算法题:寻找最近的回文数

这篇博客介绍了一个经典的算法问题,即寻找给定整数最近的回文数。当数字长度为1时,答案为n - 1。对于开头为1或9的情况,有特定的候选答案。如果数字本身对称,可以通过调整中间位数来得到答案;若不对称,可以通过逆序前半部分或调整中间位数实现。博主分享了具体的思路和实现方法。
摘要由CSDN通过智能技术生成

一、题目

给定一个整数 n ,你需要找到与它最近的回文数(不包括自身)。

“最近的”定义为两个整数差的绝对值最小。

示例 1:

输入: "123"
输出: "121"

二、思路

如果数组的字符串长度 == 1,数字n - 1
开头为1,9**9为一个候选答案        例:100000,答案为99999
开头为9, 10**01为一个候选答案       例:99999,答案为100001
如果本身对称,则把最中间的一个(或两个)位数减(如果0则加
例:123321,答案为122221
例:120021,答案为121121
如果不对称:
把前半部分逆序替换掉后半部分       例:1223,答案为1221
把最中间的一个(或两个)位数加一   例:1283,答案为1331,而非1221
把最中间的一个(或两个)位数减一   例:1800,答案为1771,而非1881

三、实现

public String nearestPalindromic(String n) {
    // 处理特殊值 1位数
    if (n.length() == 1) {
        return String.valueOf(Math.abs(Long.parseLong(n) - 1));
    }
    // 原始数据
    Long num = Long.parseLong(n);
    // 原始数据直接 转回文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值