Leetcode练习<十二> 判断整数是否为回文

xiaoxiao2021-02-28  87

# 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中取整是双斜杠 //

               乘方是双乘号 **

                          取余是单百分号 %

转载请注明原文地址: https://www.6miu.com/read-60240.html

最新回复(0)