LeeCode每日一题--回文数

Glenna ·
更新时间:2024-09-21
· 817 次阅读

  【前言】坚持日更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 x0: 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


作者:Mingw_



leecode 回文数

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章