这是LeetCode里的一道简单题,拿到这个题目我第一个想的是将数据前后对比,也就是第一个数字和倒数第一个数字对比,第二个数字和倒数第二个数字对比,可能有人会疑问,数字的长度可能是奇数个也可能是偶数个,是否需要分情况讨论,实际上并不需要,并且这种前后对比的方式更快一些。
比如 12321 前后对比,第一个和最后一个相等,那么可以继续对比,2和2相等,继续,那么3和3自身相比,相等,则结束判断,这是我的一个基本的思路,这里可以做一个小的改进,比如说,如果是奇数个,假设是n,实际上只需要比对 n/2(向下取整),以12321为例,n=5,则只需要比对2次即可,因为第三个数正着数和倒着数都是同一个数,所以最后一个可以不做比较。
这里涉及了两个问题:
①如果是用C/C++实现的话,因为C++默认是取整的,所以5/2=2,但是Python不是,在Python中5/2=2.5,所以这里需要做类型转换。
②怎么求这个数的长度(有几个数),对于整数来说是没办法求的,所以,这里我第一个想法是转为字符串,那么就可以直接利用 len( ) 求这个字符串的长度。
所以最后的解决方法如下:
class Solution: def isPalindrome(self, x: int) -> bool: strX = str(x) #转为字符串 length = len(strX) # 求字符串长度 for i in range(int(length/2)): # 长度/2 然后向下取整,获得比对次数 if strX[i] != strX[length-1-i]: #进行比对,一旦有不一样直接返回False退出 return False return True
最终的结果用时超过76%用户,还有可以继续改进的地方~
其实以前我也写过回文数的题目,但是当时是用的C++写的,相对比较复杂,Python确实让代码变得很简单。。
关于LeetCode的解题方法 欢迎大家一起讨论~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)