力扣 | 7.整数反转
题目截图
方法一:数学法思路:
利用“%”取模,利用“/”除数。
注意:python默认是浮点算法,所以要加上int()强制转换为整数型。
同时题目要求输入输出的范围都必须是,此处做两次判断。
同时要判断是否为负数。
输入的x为0时和正数情况一致,不做区分。
我分成两个方法。
输入是负数时,先将负数转为正数,然后直接引用正数的方法反转,最后再将其变为负数。
class Solution:
def reverse(self, x: int) -> int:
if -2 ** 31 <= x <= 2 ** 31 - 1:
if x < 0:
x = -x
y = (-1) * self.reverse_Positive_number(x)
else:
y = self.reverse_Positive_number(x)
else:
y = 0
if -2 ** 31 <= y <= 2 ** 31 - 1:
pass
else:
y = 0
return y
def reverse_Positive_number(self, x: int) -> int:
y = 0
while x > 0:
temp = x % 10
x = int(x / 10)
y = y * 10 + temp
return y
代码的优化:
是int型的取值范围,python中没有INT_MIN和INT_MAX,需要手动定义。
直接在代码中写-2 ** 31等数值意义不明,应改为:
INT_MIN, INT_MAX = -2**31, 2**31 - 1
python中两个斜杠“//”可以表示整除,不一定要使用int()来转换。python3中取余向下取整数。
python3取模方法如下:
正数直接整除后取除法的余数
-x%y=z
找-x%y = -x- (比-x小的那个可以被y整除的负整数) =-x -(-n*y) ==n*y-x=z的模。
上段代码其实只需要判断返回的y是否在区间就可以了,当然,判断两次也无可厚非。
因为python3给负数取10的模也会返回的结果,可以借此将模减去10,得到一个负数
如 ,将,再利用,也就是
# Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果,因此这里需要进行特殊判断
if x < 0 and digit > 0:
digit -= 10
最后优化的代码如下:
class Solution:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2**31, 2**31 - 1
rev = 0
while x != 0:
# INT_MIN 也是一个负数,不能写成 rev < INT_MIN // 10
if rev < INT_MIN // 10 + 1 or rev > INT_MAX // 10:
return 0
digit = x % 10
if x < 0 and digit > 0:
digit -= 10
x = (x - digit) // 10
rev = rev * 10 + digit
return rev
或者
class Solution:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2 ** 31, 2 ** 31 - 1
flag = 1 if x > 0 else -1
x_positive = abs(x)
y = 0
if INT_MIN <= x <= INT_MAX:
while x_positive > 0:
temp = x_positive % 10
x_positive = int(x_positive / 10)
y = y * 10 + temp
ret = flag * y
else:
ret = 0
if INT_MIN <= ret <= INT_MAX:
pass
else:
ret = 0
return ret
方法二:利用字符串取反
设置一个标记flag,若x>0则为1,否则为-1
flag = 1 if x > 0 else -1
让后将int型的x转变为str型,同时反转输出后再强制转变为int型
int(str())
利用abs()去x的绝对值
最后的结果乘以标记flag
ret = flag * int(str(abs(x))[::-1])
最终结果
class Solution:
def reverse(self, x: int) -> int:
flag = 1 if x > 0 else -1
ret = flag * int(str(abs(x))[::-1])
if abs(ret) > 2 ** 31:
ret = 0
ret
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)