5.回文数-leetcode 009(python)

  • 题目描述

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

  • 示例1

输入: 121
输出: true


  • 示例2

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


  • 示例3

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


  • 解决方案一

受题目启发,将整数转换为字符串,判断正序与倒序字符串是否相等

  • 代码一
class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        flag = False
        str_1 = str(x)
        str_2 = str_1[::-1]
        if str_1 == str_2:
            flag = True
        return flag
  • 解决方案二

首先排除x是负数的情况,肯定不是回文数,然后依次比较x的最高位数字和最低位数字,需要借助一个记录当前数字x共有多少位的变量d,在比较的循环中,x需要不断去掉最高位和最低位,因此每进行一次循环,d就需要除以100

需要注意的是,while循环的条件是x>0,而不是x>=10,我第一次出错就是因为没想清楚这个道理。执行报错了才知道。如果输入是1000021的话,那么一次循环之后,x变为00002,仍旧需要在循环中进行比较,而如果按照x>=10的条件来执行,就会直接返回true的结果,出现错误。

  • 代码二
class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        
        flag = True
        
        #如果x是负数的话,肯定不是回文数
        if x < 0:
            flag = False
            return flag
        #计算x共有多少位
        d = 1
        while x/d >= 10:
            d = d * 10
            
        #循环取x的最高位和最低位,每次比较
        #即使x是个位数,也需要在循环中比较,可能出现x=00002的情况
        while x > 0:
            #q是x的最高位
            q = x/d
            #r是x的最低位
            r = x%10
            if q != r:
                flag = False
                return flag
            #去掉x的最高位和最低位
            x = x%d/10
            d = d / 100
            
        return flag

猜你喜欢

转载自blog.csdn.net/Try_my_best51540/article/details/82864823