题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一(字符串法)
- 思路
将整数转为字符串
从两头取字符逐一判断 - 代码
class Solution:
def isPalindrome(self, x: int) -> bool:
istr=str(x)
lens=len(istr)
flag=True
for i in range(lens):
if i>lens-i: #若检验过半,退出循环
break
if istr[i]!=istr[lens-i-1]: #若发现非对称字符,令flag=False并退出循环
flag=False
break
return flag
- 结果
解法二(折半反转法)
- 思路
在循环中,利用整除和取余,从后往前将x中数字加入新的整数num
当x<=num时,说明已经到半或者过半,结束循环
对比x和num是否相同
注意:
(1)除0以外,整数以0结尾的都不是回文数(无以0开头的数)
(2)对于有奇数个数位的整数,num会比x多一位(最后一位),所以须比较x和num//10 - 代码
class Solution:
def isPalindrome(self, x: int) -> bool:
if x%10==0 and x!=0:
return False
num=0
while(x>num):
k=x%10
num=num*10+k
x=x//10
if x==num or x==num//10:
return True
else:
return False
- 结果