letcode[009] 回文数

2018-12-22  本文已影响4人  一起学分析
题目009

题目地址:回文数

在使用字符串方法的情况下此题和007较为类似

思路1:自拟思路——字符串反转

这里仍然用到字符串反转的技巧,根据题设,先排除输入的x非正数和小于0的情况,然后对大于0的情况进行字符串反转比较处理
总结:和007类似的思路
用时:256 ms (击败99.97%的用户,是不是因为增加了类型判断的原因?)

def isPalindrome1(x):
    if type(x) is not int:
        return False
    elif x<0:
        return False
    else:
        x_str=str(x)
        x_r=x_str[::-1]
        if int(x_r)==x:
            return True
        else:
            return False

思路2:网友思路——直接比较字符串反转值

emmmm,我还能说什么呢?
总结:只能是emmm了
用时:256 ms (击败99.97%的用户,看了回答,相似代码用时176ms,可能还跟网速有关)

def isPalindrome2(x):
    return str(x) == str(x)[::-1]

#这是最快一个,加了一个if判断
def isPalindrome(x):
    if x >= 0 and str(x) == str(x)[::-1]:
        a = True
    else :
        a = False
    return a

思路3:自拟思路——不用字符串转换

利用取模和地板除算法,对数据进行个十百千等位数的拆解
总结:这个本来应该是最先想到的方法吧,并不是很省力。
用时:572 ms

def isPalindrome3(x):
    #仍然先判断x的数据类型
    if (type(x) is not int) or x<0:
        return False
    else:
        #定义m作为反转后的数据
        #定义n=x作为处理过程中的桥梁数据
        # n%10用于取模(当前数据除以10后的余数),
        #然后再对n进行地板除(除10后只保留整数部分),接着n不等于0时循环上述步骤
        m=0
        n=x
        while (n!=0):
            m=m*10+n%10
            n=n//10
        return x==m
上一篇 下一篇

猜你喜欢

热点阅读