9.回文数

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

示例 1:

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

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

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

1[自a] 每位都取出来 —— 由于2个并列循环,速度只超越了10%

def isPalindrome(x):
    """
    :type x: int
    :rtype: bool
    """

    '''负数有负号 一定不是回文'''
    if x < 0:
        return False

    '''拆成单个数字'''
    count = 0  # 位数
    list = []
    while x // 10:
        list.append(x % 10)
        count += 1
        x //= 10
    list.append(x % 10)
    count += 1

    '''位数奇偶可通过 位数//2统一化处理'''
    for i in range(count//2):
        if list[i] != list[count-i-1]:
            return False
    return True  # 妙:单个数字 1//2=0 自动漏下来True

2 左右半拉 直接比整个数 —— 只有一个循环,速度超越80%

【特例】

最后一位是0就一定不行,无论前面是0还是1~9
需要筛掉最后一位为0的,因为第一位不可能为0 

100 1000 倒数23位是0 当然更不行了!!
def isPalindrome(x):
    """
    :type x: int
    :rtype: bool
    """

    '''负数都不符合'''
    if x < 0:
        return False

    '''
        最后一位是0就一定不行,无论前面是0还是1~9
    '''
    if x%10 == 0 and x!=0:
        return False

    '''左半拉 和 右半拉 比较回文'''
    y = 0  # 右半拉的反转数字
    while x // 10:
        y = y * 10 + x % 10
        x //= 10
        if x / 10 < y * 10:  # 达到一半的位数中止
            break

    '''比较 左右半拉的数'''
    if x == y or x // 10 == y:  # 奇偶只能这么用"或"来判断
        return True
    return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值