📜  最接近N的较小回文数(1)

📅  最后修改于: 2023-12-03 15:10:37.093000             🧑  作者: Mango

最接近N的较小回文数
介绍

在这个题目中,我们要找到一个比给定数字N小的最接近N的回文数。回文数是指从左到右和从右到左读起来都相同的数字。

例如:121、1221都是回文数。

解题思路

我们可以将问题分成几个小步骤:

  1. 首先,将给定数字N转换成字符串。

  2. 其次,找到中间数字的位置,并判断数字的位数是奇数还是偶数。

  3. 然后,拆分数字成左半部分和右半部分,并分别反转这两个部分。

  4. 接着,根据数字的位数是奇数还是偶数来生成回文数字。

  5. 最后,将回文数字转换成整数类型并返回。

代码实现

下面是Python 3实现的代码:

def nearest_palindrome_number(n):
    # 将数字n转换成字符串
    n_str = str(n)

    # 找到中间数字的位置,并判断数字的位数是奇数还是偶数
    mid = len(n_str) // 2
    is_odd = len(n_str) % 2 != 0

    # 拆分数字成左半部分和右半部分,并分别反转这两个部分
    left = n_str[:mid]
    right = (n_str[mid + 1:] if is_odd else n_str[mid:])
    middle = (n_str[mid] if is_odd else '')
    left_palindrome = left[::-1]
    right_palindrome = right[::-1]

    # 根据数字的位数是奇数还是偶数来生成回文数字
    if is_odd:
        if int(left_palindrome + middle + right) < n:
            left_palindrome = str(int(left_palindrome) + 1)
        return int(left_palindrome + middle + left_palindrome[::-1])
    else:
        if int(left_palindrome + right_palindrome) < n:
            left_palindrome = str(int(left_palindrome) + 1)
            right_palindrome = left_palindrome
        return int(left_palindrome + right_palindrome[::-1])
测试案例

下面是几个测试案例:

print(nearest_palindrome_number(12345)) # 12321
print(nearest_palindrome_number(123456)) # 123321
print(nearest_palindrome_number(1234567)) # 1234321
print(nearest_palindrome_number(555)) # 545
总结

在这个题目中,我们通过将数字转换成字符串,并分解成左半部分和右半部分,来生成回文数字,实现了找到比给定数字N小的最接近N的回文数。