1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

# 示例 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:
# x 若是 0 或者负数,返回 false
if (x < 0 or (int(x % 10 == 0) and x != 0)):
return False
# 初始化翻转数字
reverse = 0
# 若原始数字 x 大于从后面开始翻转的数字,说明已经翻转了后半部分,翻转阶段完成
while (x > reverse):
reverse = int(reverse * 10) + int(x % 10)
x = int(x / 10)
print('x:', x)
print('reverse', reverse)
# 若翻转的后半部分数字 reverse 等于前半部分数字,返回 true,否则返回 false,利用 int 向上取整的特性,当 x 为奇数时,去掉最后一位
return x == reverse or x == int(reverse/10)

x = Solution()
arr = [121, -121, 10]
for item in arr:
print(x.isPalindrome(item))