inversión de enteros de python3
Darle un entero x de 32 bits con signo y devolver el resultado de invertir la parte digital de x.
Si el entero excede el rango de enteros de 32 bits con signo [−2 ^ 31, 2 ^ 31 - 1] después de la inversión, se devuelve 0.
Suponga que el entorno no permite el almacenamiento de enteros de 64 bits (firmados o sin firmar).
Ejemplo 1:
Entrada: x = 123
Salida: 321
Ejemplo 2:
Entrada: x = -123
Salida: -321
Ejemplo 3:
Entrada: x = 120
Salida: 21
Ejemplo 4:
Entrada: x = 0
Salida: 0
Idea 1: conviértalo en una cuerda, dale la vuelta y juzga si es positivo o negativo. Finalmente, el título requiere que si el entero invertido excede el rango de enteros de 32 bits con signo [−2 ^ 31, 2 ^ 31 - 1], se devolverá 0
class Solution:
def reverse(self, x: int) -> int:
str1 = str(x)
if str1[0] == '-':
str1 = str1[0] + str1[:0:-1]
else:
str1 = str1[::-1]
return int(str1) if -2147483648<int(str1)<2147483648 else 0
Idea 2: No uses cuerdas. Cuando el número invertido es mayor que la condición, devuelve 0
class Solution:
def reverse(self, x: int) -> int:
y, res = abs(x), 0
# 则其数值范围为 [−2^31, 2^31 − 1]
boundry = (1<<31) -1 if x>0 else 1<<31
while y != 0:
res = res*10 +y%10
if res > boundry :
return 0
y //=10
return res if x >0 else -res
Mejorar:
class Solution:
def reverse(self, x: int) -> int:
str1 = str(x)
if str1[0] == '-':
str1 = str1[0] + str1[:0:-1]
a=int(str1)
if (1<<31)<abs(a):
return 0
else:
str1 = str1[::-1]
a= int(str1)
if a>(1<<31) -1:
return 0
return a