Inverso entero (Python)

Dado un entero x de 32 bits con signo, devuelve el resultado de invertir la parte numérica de x.
Devuelve 0 si el entero invertido supera el rango [−2 ** 31, 2 ** 31 − 1] de un entero de 32 bits con signo.
Suponga que el entorno no permite almacenar enteros de 64 bits (con o sin signo).
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: convierta el entero con signo en una cadena, elimine el bit de signo, invierta la cadena y luego conviértalo en un entero (preste atención a la restauración del símbolo original) y finalmente juzgue si se desborda.

def reverse(x):
    if x == 0:
        return 0
    s = str(x)
    s = s.replace("-","")  # abs() 也可以用
    re = s[::-1]  # 反转
    re = [-1,1][x > 0] * int(re)  # 正负 if - else 判断
    if not -2**31 <= re <= 2**31-1:
        return 0
    return re

if __name__ == "__main__":
    x = 120
    print(reverse(x))

Simplificación de código: Python3.1+, viene con un método bit_length() que le permite consultar la cantidad de dígitos o la longitud de un binario.

def reverse(self, x: int) -> int:
	# re = [-1, 1][x > 0] * int(str((x))[::-1].replace('-',''))
	re = [-1,1][x > 0] * int(str(abs(x))[::-1])
    return re if re.bit_length() < 32 else 0

If - else uso de juicio ver: https://blog.csdn.net/qq_43325582/article/details/122544661

Idea 2: Método matemático, saque el último número, luego agréguelo al número devuelto y luego desborde el juicio. El tema requiere que no se permitan enteros de 64 bits, es decir, los números en la operación deben estar dentro del rango de enteros de 32 bits con signo.

  • número = x % 10
  • x/= 10
  • re = re*10 + num (inicial: re = 0)
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
            # Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果,需要进行特殊判断
            if x < 0 and digit > 0:
                digit -= 10

            # Python3 的整数除法在 x 为负数时会向下(更小的负数)取整,因此直接 x //= 10
            x = (x - digit) // 10
            rev = rev * 10 + digit
        return rev

Supongo que te gusta

Origin blog.csdn.net/qq_43325582/article/details/122713477
Recomendado
Clasificación