地址:https://leetcode-cn.com/problems/reverse-integer/description/
一开始我也想到了两种思路
第一种:从个位开始取余,每取一次,原数字缩小10倍,并将取到的数字放入字符串中,直到原数字缩小到0。最后将字符串转回整形并返回,结果一直报奇怪的错误,我自己编译器上调试输出都正常,希望以后能明白原因。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if(x>(pow(2,31)-1) or x<-pow(2,31)):
return 0
flag=0
if(x<0):
string="-"
flag=1
x=x*-1
else:
string=""
while(x!=0):
string=string+str(x%10)
x=int(float((x/10)))
x=int(str(string))
return x
错误信息 Line 19: ValueError: invalid literal for int() with base 10: ''
后来学习了网上大牛的写法,不需要讲取到的余数存入字符串,直接用整数处理,就没有报错了
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if(x>(pow(2,31)-1) or x<-pow(2,31)):
return 0
flag=1
if(x<0):
string="-"
flag=-1
x=x*-1
else:
string=""
new_x=0
# if(flag==1):
# string="-"+string
while(x!=0):
new_x = 10*new_x+x%10
x=int(float((x/10)))
if(new_x*flag >(pow(2,31)-1) or new_x*flag <-pow(2,31)):
return 0
return new_x*flag
还有一种思路是,直接转成字符串,python可以直接做到反转
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = int(str(x)[::-1]) if x >= 0 else - int(str(-x)[::-1])
return x if x < 2147483648 and x >= -2147483648 else 0
太久没做题,感觉自己已经是个废人了,一个简单题花了1个多小时