返回

LeetCode 564. 探秘回文数的奥秘,最近的回文数如何寻

后端

认识回文数

回文数的定义很简单:从左往右读和从右往左读都相同。例如,1221、123454321 等都是回文数。回文数在数学和计算机科学中都有着广泛的应用。

寻找最近回文数

LeetCode 564 题要求我们找到一个整数的最近回文数,即与该整数差的绝对值最小的回文数。为了解决这个问题,我们可以使用以下步骤:

  1. 找到整数的左回文数和右回文数。 左回文数是指比该整数小的最大回文数,右回文数是指比该整数大的最小回文数。
  2. 计算整数与左回文数和右回文数的绝对值。
  3. 选择绝对值较小的回文数作为最近回文数。

代码实现

以下是用 Python 实现的 LeetCode 564 题的代码:

def find_nearest_palindrome(n):
  """
  找到整数 n 的最近回文数。

  参数:
    n:要查找最近回文数的整数。

  返回:
    整数 n 的最近回文数。
  """

  # 找到 n 的左回文数和右回文数。
  left_palindrome = find_left_palindrome(n)
  right_palindrome = find_right_palindrome(n)

  # 计算 n 与左回文数和右回文数的绝对值。
  left_diff = abs(n - left_palindrome)
  right_diff = abs(n - right_palindrome)

  # 选择绝对值较小的回文数作为最近回文数。
  if left_diff < right_diff:
    return left_palindrome
  else:
    return right_palindrome

def find_left_palindrome(n):
  """
  找到整数 n 的左回文数。

  参数:
    n:要查找左回文数的整数。

  返回:
    整数 n 的左回文数。
  """

  # 从 n-1 开始递减,直到找到一个回文数。
  while True:
    n -= 1
    if is_palindrome(n):
      return n

def find_right_palindrome(n):
  """
  找到整数 n 的右回文数。

  参数:
    n:要查找右回文数的整数。

  返回:
    整数 n 的右回文数。
  """

  # 从 n+1 开始递增,直到找到一个回文数。
  while True:
    n += 1
    if is_palindrome(n):
      return n

def is_palindrome(n):
  """
  判断整数 n 是否是回文数。

  参数:
    n:要判断的整数。

  返回:
    True 如果 n 是回文数,否则返回 False。
  """

  # 将整数 n 转换为字符串。
  n_str = str(n)

  # 将字符串 n_str 反转。
  reversed_n_str = n_str[::-1]

  # 比较原字符串和反转后的字符串是否相等。
  return n_str == reversed_n_str

# 测试代码
print(find_nearest_palindrome(123))  # 121
print(find_nearest_palindrome(12345))  # 12321
print(find_nearest_palindrome(123456))  # 1234321

总结

本文介绍了回文数的概念,并提供了一种高效的算法来解决 LeetCode 564 题。通过这道题,我们可以加深对回文数的理解,并掌握一种新的算法技巧。