inversión de enteros de python3

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 

Supongo que te gusta

Origin blog.csdn.net/qq_43710889/article/details/115341615
Recomendado
Clasificación