给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转
一开始拿到这道题不知道咋做,要进行反转的话肯定是需要遍历的,但是整数int又不能遍历。
先看了下别人的代码,是把int变为str做的,因为str能够进行遍历(后面就是自己的想法了)
- 遇见的问题
变成str类型之后能够进行遍历,那我直接的想法就是赋值一个新的str等于整数int变成的str,往里面反着赋值就ok。但是这里报错说str的值不能进行修改。那我就百度查查如何修改str的值。 - 解决办法:
资料上说:
Python中列表的值是可修改的,而元组和字符串的值是不可修改的。
- 使用字符串中的replace函数
x = 'acbianosadlinqa'
x1 = x.replace('a','e')
print(x,x1,sep = '\n')
输出结果是:
acbianosadlinqa
ecbienosedlinqe
这篇博客上说这个方法经常不适用,不适用的原因我的理解是:因为replace函数会把原字符串中的所有的a替换成e,我们在实际中经常只会替换其中某一个位置的元素。
- 将字符串转换成列表后修改值,然后用join组成新字符串
x = 'acbianosadlinqa'
x1 = x.replace('a','e')
x2 = list(x)
x2[0] = 'e'
print(x,x1,x2,sep='\n')
结果是:
acbianosadlinqa
ecbienosedlinqe
['e', 'c', 'b', 'i', 'a', 'n', 'o', 's', 'a', 'd', 'l', 'i', 'n', 'q', 'a']
会看到我们只把第一个位置的a变成了e,但是这里的x2是分离的,接着使用下join函数
x = 'acbianosadlinqa'
x1 = x.replace('a','e')
x2 = list(x)
x2[0] = 'e'
x2 = ''.join(x2)
print(x,x1,x2,sep='\n')
结果是:
acbianosadlinqa
ecbienosedlinqe
ecbianosadlinqa
达到预期效果。
查查join函数的功能:
就是说join有两个参数吧,str.join(),前面那个str是指以什么方式把给定的str连接起来,括号里面是指把什么连接起来
用上面的x2来随便写个例子,
x3 = 's'.join(x2)
x4 = '-'.join(x2)
x5 = ''.join(x2)
print(x3,x4,x5,sep='\n')
结果是:
escsbsisasnsosssasdslsisnsqsa
e-c-b-i-a-n-o-s-a-d-l-i-n-q-a
ecbianosadlinqa
- 使用序列切片方式
字符串本身也是一种序列,可以使用序列切片的方式。
x2 = x1[:5] + '1' + x1[7:]
print(x1,x2,sep= '\n')
结果是:
ecbienosedlinqe
ecbie1sedlinqe
会发现这里长度少了一位(我本来以为长度不变),稍微想一想,这和其他的方法切片是一回事。
答案
准备工作差不多了,开始写这道题的答案
class Solution:
def reverse(self, x: int) -> int:
x1 = str(x)
x2 = list(x1)
x3 = x2
if x == 0:
return x
elif x>0:
for i in range(len(x1)):
x3[i] = (x1[len(x1) - i - 1])
x4 = ''.join(x3)
x5 = int(x4)
else:
x11 = x1[1:]
for i in range(len(x11)):
x3[i+1] = (x11[len(x11) - i - 1])
x4 = ''.join(x3)
x5 = int(x4)
if x5 <= 2**31 - 1 and x5 >= -(2**31):
return x5
else:
return 0
虽然提交成功了,但是自己用的时间可能就emmmmmm。。。。
参考资料:https://blog.csdn.net/saltriver/article/details/52194921
https://www.runoob.com/python/att-string-join.html