LeetCode 力扣题解(9)回文数,实现语言:Python,解决方法:对折比较。
一、题目:回文数
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121
是回文,而 123
不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
提示:
- − 2 31 < = x < = 2 31 − 1 -2^{31} <= x <= 2^{31} - 1 −231<=x<=231−1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、题解:对折比较
对折比较,将整形从中间对折,比较是否相等,时间复杂度是 O ( n ) O(n) O(n),空间复杂度是 O ( n ) O(n) O(n)。
如果整形 x
是负数,或者可以被 10
整除,那 x
一定不是回文数。因为被 10
整除,数的最后一定有一个 0
,而数不以 0
开头。
对 x
逐步提取 个位数
,以 y
保存,并且 x
逐步丢去个位数。
12321
x: 12321->1232->123->12
y: 0 -> 1-> 12->123
最后,如果 x
是偶数位,则判断 x==y
。如果是奇数位,则判断 x==y/10
。
三、示例代码
class Solution:
def isPalindrome(self, x: int) -> bool:
if x<0 or (x%10 == 0 and x != 0):
return False
y = 0
while(x > y):
y = y * 10 + x % 10
x = x // 10
if x==y or x==y//10:
return True
else:
return False