如何编写程序查找与用户输入整数最接近的回文数?
查找最接近回文数的实现方案
核心逻辑
- 优先处理边界场景:小于10的整数本身就是回文数,直接返回即可
- 将输入整数转为字符串,取前半段作为生成候选的基准值,生成三类候选回文数:
- 基准值直接镜像拼接生成的回文数
- 基准值加1后镜像拼接生成的回文数
- 基准值减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
相关产品推荐
相关产品推荐

