题目描述:
我自己的思路是:将输入的数字转化为字符串,将字符串分为前半部分和后半部分,分别将其使用append()函数传入列表里,然后比较两个列表是否相等。代码如下:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
xs=str(x)
L=len(xs)
List1=[]
List2=[]
m=L%2
flag=L
if m==0:#偶数
h1=L//2
while flag>h1:
a=xs[flag-1]
b=xs[L-flag]
List2.append(b)
List1.append(a)
flag-=1
return List2[:]==List1[:]
elif m==1:
h2=L//2+1
while flag>h2:
a=xs[flag-1]
List1.append(a)
b = xs[L-flag]
List2.append(b)
flag-=1
return List2[:]==List1[:]
在网上看有一个人写的,特别简单,顿时觉得自己好傻哦,还是学的太少了,代码如下:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
xs=str(x)
return xs[:]==xs[::-1]
也是将数字转化字符串,然后直接使用xs[::-1]反转字符串,比较就行。
xs[::]的用法总结:
s=‘12345’。
s[i:j:k],的意思是从第i个位置开始到第j个位置间隔k个元素输出字符串:
b[1:2:]#从第1个位置开始,第2个位置结束,间隔不写默认为1
Out[15]: '2'#输出2
b[1::]#从从第1个位置开始,结束下标不写默认到最后一个,间隔不写默认为1
Out[16]: '2345'#输出2345
b[::1]#间隔为1,输出全部字符
Out[19]: '12345'
b[::-1]#-1代表反向顺序,输出全部字符
Out[20]: '54321'
题目描述:
通过X%10可以取到X的个位数,X//10可以依次将X最后一位数字取掉(1234//10=123,123//10=12)。
将输入的数字先去绝对值,最后返回的时候在加上符号。
分析:X=1234变成4321,Temp=X%10=4,ans=ans+Temp10=4,X=1234//10=123;Temp=X%10=3,ans=ans10+Temp=43,X=123//10=12;…,依次类推就可得到ans=4321。代码如下:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
X=abs(x)
tmp = 0
ans = 0
while X > 0:
tmp = X % 10
ans = ans * 10 + tmp
X//= 10
if ans<(-2)**31 or ans>(2**31)-1:
return 0
elif x>0:
return ans
else:
return ans*(-1)
题目描述:
先将罗马数字以及其代表的数字大小放在字典里,然后对输入字符串使用enumrate()函数,使其包含的罗马数字按照顺序排列。比较第i个和第i+1的罗马数字代表的数值大小,如果i>i+1,则Temp+=Value[i],反之,Temp-=Value[i]。在进行比较的过程中,使用的是for循环,因此只能加到第i-1个罗马数字,且需要设置i
代码如下:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
Dire={
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000,
}
Temp=0
n=len(s)
for Key,Val in enumerate(s):
if Key
注意:
#错误的:
#之前分析过最后需要加上Dire[s[n]]最后一个罗马数,这样写的话,
#在从第1个到n-1个罗马数的时候,像VII,在计算到I和I的时候,就直接不满足#Dire[s[Key]]>Dire[s[Key+1]],然后变成了 Temp-=Dire[s[Key]],输出就会出错,
#如果改成Dire[s[Key]]>=Dire[s[Key+1]],也是错误的,由于当Key=n的时候,没有加上Dire[s[n]]最后一个罗马数。
if KeyDire[s[Key+1]]:
Temp+=Dire[s[Key]]
else:
Temp-=Dire[s[Key]]
#正确的:
#当Key
还有一种写法,是不使用enumerate()函数:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
Dire={
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000,
}
L=len(s)
i=0
Temp=0
if L>15:
return 0
for i in range(L-1):
if Dire[s[i]]>Dire[s[i+1]]:
Temp+=Dire[s[i]]
else:
Temp-=Dire[s[i]]
Temp=Temp+Dire[s[-1]]#加上最后一个
return Temp