问题:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例:
示例1:
输入: 121
输出: true
示例2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解决:
思想
拿到这种回文数字类别的题目(包括前后数字对比等),我们要充分的想到使用余数这个方便的工具,因为我们可以将每次模10取余得到的数存起来,其存储的顺序就是从后之前的顺序,接着我们在对其进行倍数扩大,与原数进行对比。
python代码:
class Solution:
def isPalindrome(self, x: int) -> bool:
if(x==0):
return True
if(x<0):
return False
if(x%10==0):
return False
l=[]
number=0
origined=x
while(x!=0 and int((x/10)+1)!=0):
i=x%10
l.append(i)
x=int(x/10)
length=len(l)
for i in range(length):
number=number+(l[i])*(10**(length-1))
length-=1
print(number)
if int(number)==origined:
return True
else:
return False
解释:前面几次条件判断是考虑几个特殊情况(x为0,负数,10的倍数)。循环条件是对x进行除法运算,如果其值加1等于0代表我们已经到了第一个数字了,注意:在python3中的除号/是会将int型变为float型,也就是我们平常除了多少就是多少,我们需要使用强制转换让其省略小数部分。将所有的与余数保存起来,并且x进行相应的变换。最后在将list中的数倍数扩大,进而与原始的数进行对比