LeetCode算法个人解答——9.回文数

本文介绍了一种计算机科学中的经典问题:判断一个整数是否是回文数。提供了三种不同的解决方案,包括将整数转为字符串进行比较,不使用字符串的数学方法,以及最优的字符串反转比较法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?

解1(执行时间400ms,转成字符串)

解题思路

1.将整数转换成字符串
2.分别从首尾往中间取值,判断大小(分别取一半的值即可)

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        # 新建变量 i ,j ,保存下标
        i = 0
        j = 0
        # 将整数转换为字符串
        x = str(x)
        # 取得整数的长度
        Len = len(x)
        # 取长度的一般作为i取值的最大值
        half = Len // 2
        # 循环取i
        for i in range(half):
            j = - 1 - i
            # 取整数x的第一位
            num1 = x[i]
            # 取整数x的最后一位
            num2 = x[j]
            # 比较是否相等
            if num1 != num2:
                # 不相等
                return False
        return True

解2(执行时间388ms,不转字符串)

解题思路

  1. 负数肯定不是回文数,因为有负号
  2. 能被10整除的非0整数肯定不是回文数,因为最高位肯定不是0
  3. 整数除10取余可以得到最后一位的数字
  4. 整数除10取整数部分可以得到除最后一位的其他数字
  5. 整数位数有奇数和偶数之分,需要考虑到位数为奇数的情况
class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        # 判断x的正负
        if x < 0:
            # 如果小于0,肯定不是回文数
            return False
        # 判断x是否是10的倍数,如果是10的倍数,肯定不是回文数,除0以外!!!
        if x % 10 ==0 and x != 0:
            return False
        # 新建一个值,储存回文数
        y = 0
        # 取整数的后一半
        while x > y:
            # 取x的最后一位数,赋值给y
            y = y * 10 + x % 10
            # 删去x的最后一位数
            x = x // 10
        # 判断x和y是否相等,
        if x == y  or x == y//10:
            return True
        return False

解3(最佳解,执行时间244ms,转成字符串)

解题思路

1.转成字符串
2.非负数才能使回文数
3.字符串切片[::-1]可以得到反转的字符串

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x >= 0 and str(x) == str(x)[::-1]:
            return True
        else:
            return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值