You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写程序查找与用户输入整数最接近的回文数?

查找最接近回文数的实现方案

核心逻辑

  • 优先处理边界场景:小于10的整数本身就是回文数,直接返回即可
  • 将输入整数转为字符串,取前半段作为生成候选的基准值,生成三类候选回文数:
    1. 基准值直接镜像拼接生成的回文数
    2. 基准值加1后镜像拼接生成的回文数
    3. 基准值减1后镜像拼接生成的回文数
  • 补充位数差1的边界候选:避免出现输入为99、100这类临近位数变化的数值时候选缺失的问题
  • 计算所有候选与输入值的绝对差值,优先选差值最小的;差值相同时选数值更小的结果

Python 实现代码

def nearest_palindrome(n: int) -> int:
    # 个位数直接返回自身
    if n < 10:
        return n
    s = str(n)
    str_len = len(s)
    candidates = set()
    
    # 加入位数差1的边界候选
    candidates.add(10 ** (str_len - 1) - 1)
    candidates.add(10 ** str_len + 1)
    
    # 取前半段作为基准前缀
    prefix = int(s[:(str_len + 1) // 2])
    # 生成三个前缀调整后的候选
    for delta in (-1, 0, 1):
        adjust_prefix = str(prefix + delta)
        # 奇偶长度的镜像规则不同
        if str_len % 2 == 0:
            palindrome = adjust_prefix + adjust_prefix[::-1]
        else:
            palindrome = adjust_prefix + adjust_prefix[:-1][::-1]
        candidates.add(int(palindrome))
    
    # 排除输入本身(如果输入本身是回文数)
    candidates.discard(n)
    # 按差值优先、数值优先的规则选最优结果
    return min(candidates, key=lambda x: (abs(x - n), x))

效果验证

  • 输入 98:输出 101,匹配示例要求
  • 输入 1234:输出 1221,匹配示例要求
  • 补充测试:输入 100 输出 99,输入 121 输出 111(差值相同返回更小值)

内容的提问来源于stack exchange,提问作者Plamen Mateev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:03