LeetCode 9 Palindrome Number (easy)——python

 题目来源:

                       https://leetcode.com/problems/palindrome-number/description/

 题目分析:

      本题要我们判断一个整数是否是回文数,Do this without extra space.这句,当时我的理解是说在输入时不要留有空格,因此我写的程序较为简单,没有判断溢出等情况,有大神的理解是说不占用其他空间,因此不能将整数转化为其他形式来进行处理,我下面也会进行相应的讨论。

 题目解答:

       先附上我写的代码,通过了感觉有点神奇,因为我没有考虑溢出的情况,要是有大神来解释一下不胜感激!!!
class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if(x>=0):
            if(x==int((str(x))[::-1])):
                return True
            else:
                return False
        else:
            return False
       如果按照不能申请额外空间来做,则可以考虑将int型数据翻转过来,这是要注意不能超过其溢出范围(32位)
class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if(x<0):
            return False
        else:
            ans=0
            b=x
            while(x>=0):
                ans=ans*10+x%10
                if (ans>2**32/2):
                    return False
                x//=10
            if(b==ans):
                return True
      但是将其写在网页中,貌似不能编译成功,因为时间复杂度过高。上面的代码中需要注意的是在python3中,/表示浮点数除法,返回浮点数结果,//表示整数除法,返回整数结果。
       第三种方法有一定的技巧性,思路其实比较容易理解,但就是在写代码的判断条件上需要比较注意,这次碰到了就记住吧,我在写时真的试了很多次!!!!
       它的思路在于:如果一个数是回文,那么我们不用将整个数倒序过来和原来的数进行比较,而是可以取它的后一半与它的前一半来进行比较,这里就需要注意到数字个数的奇偶问题了,要注意条件的判断,如果是一致的,则是回文,如果不一致,则不是回文。这种方法可以通过编译。但是这种方法最需要注意的是需要将(x%10==0 and x!=0)这种情况单独挑出来做判断,不然就会出错,切记切记!下面,附代码:
class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if(x<0 or (x%10==0 and x!=0)):
            return False
        else:
            ans=0
            while(x>=ans):
                ans=ans*10+x%10
                if(ans>(2**32/2-1)):
                    return False
                x //= 10

                if(x==ans or x==(ans//10)):#需要考虑到回文是奇数的情况
                    return True

            else:
                return False
   以上还有一个知识点需要注意:我们观察到最后一个else没有相应的if与之对应,这是怎么回事呢?原来,在python中,else不仅可以与if搭配,还可以和while搭配,同样还可以与try语句搭配(可省),当try语句出现异常,则进入except语句,否则执行else语句。可见文:

http://blog.csdn.net/zmq570235977/article/details/48267125


 

你可能感兴趣的:(leetcode)