Leetcode--回文数(9)

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

输入:121    输出:True    输入:-121    输出false

解题思路:明显,这题跟之前的反转字符串类似(这说明刷题大概是有用的吧,毕竟有思路了(ง •_•)ง)。

思路一:暴力转换字符串

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if (x<0):
            return False
        else:
            str_x = str(x)
            i = 0
            j = len(str_x)-1
            while (i < j):
                if (str_x[i] == str_x[j]):
                    i += 1
                    j -= 1
                else:
                    return False
            return True

参考了大佬的写法后,发现自己的代码实在是过于复杂,一行搞定。(继续练习>︿<)

class Solution:
    def isPalindrome(self, x: int) -> bool:
           return str(x)[::-1] == str(x)

思路二:同反转字符串,利用栈的思想。

对思路二的改进:由于回文数的前半部分和后半部分的倒序应该是一样的,因此在循环的时候只需要读一半即可。

那怎么判断已经循环了一半了呢?将原始数字除以10,再将反转后的数字乘以10,如果原始数字/10小于反转后的数字*10时,则说明已经处理了一半位数的数字。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if (x < 0 or (x % 10 == 0 and x != 0)):
            return False
        rev = 0
        while(x>rev):
            rev = rev*10 + x % 10
            x = x//10
        if(x == rev or x == rev//10):
            return True
        else:
            return False

 

posted @ 2020-03-01 22:41  eltShawn  阅读(164)  评论(0)    收藏  举报