# Determine whether an integer is a palindrome. Do this without extra space.
# 判断一个整数是否是回文, 不能使用新的空间, 我的理解就是不能使用新的变量来存储数据
# 思路很简单, 就是先取最高位, 再取最低位, 两个比较是否相等, 相等的话就接着下一步, 不相等就返回False
# 重点在于怎样取最高位和最低位, 取整也就是除以和整数位数相等的10的次方, 即10^len(num)
# 取最低位就是除以10, 除完之后取整用到的被除数变为10^(len(num) - 2)
class Solution(
object):
def isPalindrome(
self, x):
if x <
0:
return False
ranger =
1
while x / ranger >=
10:
ranger *=
10
# b = 10 ** int(math.log10(123))
# print(ranger)
while x:
left = x // ranger
right = x %
10
# print('left = ', left, 'right = ', right)
if left != right:
return False
x = (x % ranger) //
10
print(x)
ranger /=
100
return True
def isPalindrome2(
self, x):
if x <
0:
return False
p
, res = x
, 0
while p:
res = res *
10 + p %
10 # 生成倒序的x
p = p //
10
return res == x
if __name__ ==
'__main__':
num =
12321
s = Solution()
print(s.isPalindrome(num))
如题:
判断一个整数是否为回文,题目要求说负数不是回文,而且不让使用额外的空间,我理解的额外空间就是不再创建新的变量存储X,不知道对不对,还望大神给我解答
再把思路捋一捋:
第一步创建一个和原数字数量级一致的整数ranger,比如我的X是123, 那这个ranger就是100, X是1234, ranger就是1000. 懂我意思?生成这个ranger有两种方法:
1 ranger = 10 ** len(X) 简单粗暴
2 ranger = 10 ** int(math.log10(X)) 思路是一样的, 我代码中的方法太弱鸡了
两个乘号代表乘方
第二步获得X的最高位和最低位,比较最高位和最低位是否相同,如果不相同那就返回False
如果相同,就把X的头和尾去掉,ranger要除以100, 再重复上个步骤
最高位为 left = X // ranger
最低位为 right = X % 10
注意:python中取整是双斜杠 //
乘方是双乘号 **
取余是单百分号 %