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