1、简单方法直接转化为字符串进行处理,转化为字符串后对应的每个位置上的数字都可以通过切片取出
def palindromenum(num):
num = str(num)
#此处不管是奇数个还是偶数个直接使用//进行取整
n = len(num) // 2
for i in range(0, n):
if num[i] != num[-i-1]:
return False
return True
2、将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文数。 但是,如果反转后的数字大于int.max,我们将遇到整数溢出问题。所有不能盲目的进行反转,为了避免出现溢出的问题,我们可以仅反转一半的数字,然后与另一半的数字进行比较。
def palindromenum(num):
#用来排除负数和数字末尾为0的数字(其实负数可以不用排除)
if num < 0 or num % 10 == 0 and num != 0:
return False
a = 0
#当反转后的数字小于剩余数字时继续进行反转,如果为负数此处立刻就不符合因此上方代码可以不排除负数
while a < num:
#取出剩余数字的最后一位
n = num % 10
#计算剩余数字
num = (num - n) / 10
#计算反转后数字
a = 10 * a + n
#由于上方代码跳出循环有可能a=num,a>num。等于的可以不判断(回文数),只判断大于的即可,当去掉最后一位两个数字相等的情况下为回文数
if a > num:
m = a //10
if m != num:
return False
return True
在计算速度上,第二个方法略优于字符串的方法,具体时间复杂度不清楚,为测试后结果!