返回

算法(LeetCode):回文数,300 题之九

前端

一、题目

回文数是指从左向右读和从右向左读都是一样的数字。例如,121、1221、12321等都是回文数。

LeetCode 9题要求我们判断一个给定的整数是否是回文数。

二、解法总览(思维导图)

LeetCode 9 - 回文数 - 思维导图

三、全部解法

  1. 方案 1

方案 1 的思路是将数字转换成字符串,然后使用字符串的反转函数判断字符串是否是回文。

def is_palindrome(x):
    """
    判断一个整数是否是回文数。

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

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

    # 将数字转换成字符串
    x_str = str(x)

    # 使用字符串的反转函数判断字符串是否是回文
    return x_str == x_str[::-1]


# 测试
print(is_palindrome(121))  # True
print(is_palindrome(-121))  # False
print(is_palindrome(10))  # False
print(is_palindrome(-101))  # False
  1. 方案 2

方案 2 的思路是将数字反转,然后判断反转后的数字是否与原数字相同。

def is_palindrome(x):
    """
    判断一个整数是否是回文数。

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

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

    # 如果x是负数,直接返回False
    if x < 0:
        return False

    # 将数字反转
    reversed_x = 0
    while x > 0:
        reversed_x = reversed_x * 10 + x % 10
        x //= 10

    # 判断反转后的数字是否与原数字相同
    return x == reversed_x


# 测试
print(is_palindrome(121))  # True
print(is_palindrome(-121))  # False
print(is_palindrome(10))  # False
print(is_palindrome(-101))  # False
  1. 方案 3

方案 3 的思路是使用数学运算来判断数字是否是回文。

def is_palindrome(x):
    """
    判断一个整数是否是回文数。

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

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

    # 如果x是负数,直接返回False
    if x < 0:
        return False

    # 计算x的位数
    num_digits = 0
    while x > 0:
        num_digits += 1
        x //= 10

    # 计算x的反转数
    reversed_x = 0
    for i in range(num_digits):
        reversed_x *= 10
        reversed_x += x % 10
        x //= 10

    # 判断反转后的数字是否与原数字相同
    return x == reversed_x


# 测试
print(is_palindrome(121))  # True
print(is_palindrome(-121))  # False
print(is_palindrome(10))  # False
print(is_palindrome(-101))  # False

四、总结

回文数算法是一种非常简单的算法,但它在许多实际应用中都有着广泛的应用,例如密码学、数据压缩和数字签名等。回文数算法有多种实现方法,每种方法都有其自身的优缺点。在实际应用中,我们可以根据具体的场景选择最合适的算法来实现。