判断一个整数是不是回文数
题目描述:
来源:力扣(LeetCode)09 回文数
给你一个整数 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
进阶:
你能不将整数转为字符串来解决这个问题吗?
我的答案:
class Solution:
def isPalindrome(self, x: int) -> bool:
str1 = str(x)
flag = True
for i in range(0, int(len(str1)/2)):
if str1[i] != str1[len(str1) - 1 -i]:
flag = False
break
return flag
执行结果:通过
执行用时:56 ms, 在所有 Python3 提交中击败了75.91%的用户
内存消耗:14.7 MB, 在所有 Python3 提交中击败了99.20%的用户
通过测试用例:11510 / 11510
进阶:
我的答案:
思路:先求出整数的位数,然后通过两次for循环用10来除这个数,用end和start来接收高位和地位的数,然后比较start和end是否相等,若不相等就不是回文数
class Solution:
def isPalindrome(self, x: int) -> bool:
count = 0
flag = True
number = x
number1 = number
if number1 < 0:
flag = False
while number1 > 0:
count += 1
number1 = int(number1/10)
for i in range(0,count):
end = number
start = number
#通过取余操作后依次获取到从最低位开始的数
for j in range(0,i):
end = int(end/10)
#通过取余操作后依次获取到从最高位开始的数
for k in range(0,count - 1 - i):
start = int(start / 10)
if (start % 10) != (end % 10):
flag = False
break
return flag
改进:
思路:利用一个while循环,用10整除再取余的方法用back_number接收x的逆序的数,最后判断逆序的数与之前的数是否相等
class Solution:
def isPalindrome(self, x: int) -> bool:
back_number = 0
number1 = number2 = x
#如果x是负数,那么就必然不是回环数
if x < 0:
return False
#通过轮询用10整除再取余的方法用back_number接收x的逆序的数
while number1 > 0:
back_number = (back_number * 10) + (number1 % 10)
number1 = int(number1 / 10)
return x == back_number
大佬答案:
思路:当x>=0和逆序后的x是否相等(用到了列表)
(这个提交击败了60%多的用户,不过是我能找到的最快的了,python区的答案似乎都没有很快的,可能是python的原因,如果哪位大佬有更快的算法,麻烦评论告诉我下,感谢大佬!)
class Solution:
def isPalindrome(self, x: int) -> bool:
return x>=0 and int(str(x)[::-1]) == x
对于[::-1]解释:(没看懂,所以去搜了下这段代码的解释)
b = a[i:j] # 表示复制a[i]到a[j-1],以生成新的list对象
a = [0,1,2,3,4,5,6,7,8,9]
b = a[1:3] # [1,2]
#当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
#当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
#当i,j都缺省时,a[:]就相当于完整复制一份a
b = a[i:j:s] # 表示:i,j与上面的一样,但s表示步进,缺省为1.
所以a[i:j:1]相当于a[i:j]
#当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
#所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。