原题
题目大意
给定一个数字,判断是否是回文数
121是回文
-121不是
返回 boolean: True or False
解题
题目里有提示是否可以不通过将整型转换为字符串来解决问题,所以首先考虑的“双指针”,从最大的数和最小的数从两头想中间判断每组数是否一样,不一样直接返回False,一样则继续下一组判断
Python code
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0:
return False
find_len = x
len_n = 0
while find_len > 0:
len_n += 1
find_len = find_len // 10
left_base = x
left_coff = math.pow(10, len_n - 1)
right_base = x
right_coff = 10
times = int(len_n / 2)
for i in range(times):
left_v = int(left_base / left_coff)
right_v = right_base % right_coff
left_base = left_base % left_coff
left_coff /= right_coff
right_base = right_base / right_coff
if left_v != right_v:
return False
return True
首先需要知道数字的长度。提交时用的方法比较蠢,如下
find_len = x
len_n = 0
while find_len > 0:
len_n += 1
find_len = find_len // 10
后来看了别人的题解,可以用一句话搞定,如下
num_of_digits = math.floor(math.log10(x)) + 1
补充
有些人用转换为str的方法做
一个非常便捷的题解
s = str(x)
if x[::-1] == x:
return True
else:
return False
x[::-1]是将x倒序