本文最后更新于302 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com
1.题目基本信息
1.1.题目描述
给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。
“最近的”定义为两个整数差的绝对值最小。
1.2.题目地址
https://leetcode.cn/problems/find-the-closest-palindrome/description/
2.解题方法
2.1.解题思路
模拟
2.2.解题步骤
第一步,构建候选名单。将n的前缀翻转替换后缀,并考虑中间数字加一和减一的情况
第二步,找出候选名单里面的最小回文串数
3.解题代码
python代码
class Solution:
def nearestPalindromic(self, n: str) -> str:
# 思路:模拟
# 第一步,构建候选名单。将n的前缀翻转替换后缀,并考虑中间数字加一和减一的情况
m = len(n)
candidates = [10 ** (m - 1) - 1, 10 ** m + 1]
prefixNum = int(n[:(m + 1) // 2])
for x in range(prefixNum - 1, prefixNum + 2):
y = x if m % 2 == 0 else x // 10
while y > 0:
x = x * 10 + y % 10
y //= 10
candidates.append(x)
# 第二步,找出候选名单里面的最小回文串数
result = -1
num = int(n)
for candidate in candidates:
if candidate != num:
if result == -1 or abs(candidate - num) < abs(result - num) or (abs(candidate - num) == abs(result - num) and candidate < result):
result = candidate
return str(result)
4.执行结果










