LeeCode每日一题--回文数

  【前言】坚持日更LeeCode刷题系列

   不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!


  【题目】9.回文数

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

  示例:

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

  思路一:很显然我们可以将此整数转化为字符串后,定义两个列表,一个存入原始数据,另一个进行逆转操作,再用列表中的eq函数进行判断即可。代码如下:

import operator
class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        x = str(x)  #将整数转化为str类型
        list1 = []
        list2 = []
        list1 = list(reversed(x))  #用一个列表存逆转数据
        list2 = list(x)    #用另一个列表存原始数据
        result = operator.eq(list1,list2) #调用eq函数判断两个列表是否相同
        return result

  运行结果:
在这里插入图片描述
  Notice:可能有朋友会自然的想到,在比较两个列表是否相同时,直接用‘==’ 比较运算符,但此种比较方式,只能判断列表内数值是否相等,而不能判断其位置情况,例如:list[1,2,3]和list[2,1,3]在用‘==’比较运算符时会返回true。

  补充:看到LeeCode上其他前辈的写法中,我们可以直接用str类型,而不需要将其放入list进行操作,一开始我想通过list来简单的实现逆转操作,可能受上一题的影响,自然而然的想到这种方法,但是我们同样可以 通过字符串的切片操作将其逆转

  关于其中一些知识的链接:

  Python比较两个List相等的方法


  思路二:利用模十的方法,将得到的x每个数码用list存起来,再将其还原为整数,实现首尾数码的调换。对于其中数码最后一位为 0 的整数,以及符号为负的整数进行剔除,但注意其中整数为0的特例,不能进行剔除。代码如下:

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if (x!=0 and x%10==0) or x<0:  #剔除尾码为0以及负数的情况
            return False
        else:
            original_num = x	#因为之后的x值会改变,因此要存入原始x值
            reversed_num = 0    #逆转之后的值
            list1 = []
            while x>0:
                list1.append(x%10)
                x =  x//10
            for i in range(len(list1)):
                reversed_num = reversed_num*10+list1[i]
            if(reversed_num == original_num):
                return True
            else:
                return False

  运行结果:
在这里插入图片描述

  补充:这种算术解法未进行优化,导致运行用时过长,有兴趣的朋友可以查看下面的算法讲解视频,了解更进一步的优化过程。


  关于其中一些知识的链接:

  回文数进一步优化算法(C++版)


  分享就到这里了,欢迎大家一起交流讨论。

  注明:

  题目来源:力扣(LeetCode)
  链接:https://leetcode-cn.com/problems/palindrome-number

发布了32 篇原创文章 · 获赞 62 · 访问量 1328

猜你喜欢

转载自blog.csdn.net/Mingw_/article/details/104698531