塞进裤子ヾ(≧O≦)〃嗷~

0%

leetcode-9 回文数

最初想法:

方法一:转string,再翻转看两个字符串是否相同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
strx = str(x)
reverseStrx = strx[::-1]

if strx == reverseStrx:
return True
else:
return False
# 改进: if else改为return strx == reverseStrx

官方:

1
2
3
4
5
6
7
8
RE:https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode-solution/

将x%10,x=x/10得到每个数字,因为c++可能有溢出问题,我们只要反转一半的数字。
1221 %10 得到1,reversednum = 10*reversednum + 1 = 1, 1221/10得到122;
(122>reversednum,不到一半,继续)
122 % 10 得到2,reversednum = 10*reversednum + 2 = 12 ,122/10 得到12;

由于整个过程不断将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 or (x%10==0 and x!=0): #负数不可能是回文数
#如果x的最后一位是0,要保证回文数,只有x是0满足
return False

reversednum = 0
while x > reversednum:
pop = x%10
x = int(x/10)
reversednum = reversednum*10 + pop

if reversednum == x: #x是偶数个的数字组成
return True
elif x == int(reversednum/10): #x是奇数个的数字组成
return True
else:
return False
if help:小手一抖点个广告 or 大手一挥资助一下