Likou Cepillado Cien Días Plan Day5 Inversión de enteros

objetivo de aprendizaje:

¡Continuaré actualizando mis ideas únicas de algoritmos, con la esperanza de traerles una expansión de pensamiento diferente!
Si lo encuentra útil, por favor, siga y apoye!
Su aliento es lo que me mantiene en marcha!
! ! !

Banco de preguntas de Likou Pregunta 7 Enlace oficial


Contenido de aprendizaje:

inversión entera

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [231,  2311] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

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

提示:

-231 <= x <= 231 - 1

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/reverse-integer

tiempo de estudio:

2022.1.11


Salida de aprendizaje:

idea uno
inserte la descripción de la imagen aquí

Ideas para resolver problemas

1. Si queremos invertir los números enteros, solo necesitamos generarlos en orden inverso. Naturalmente, pensamos en usar cadenas para almacenar números y luego recorrer la matriz en orden inverso, pero esto complica el problema. Llevó mucho tiempo hacer esto antes, pero mirando hacia atrás, no tenía que ser tan complicado en absoluto. Entonces, ¡piensa más!
2. Podemos tomar el resto de 10 cada vez, y el resultado del resto es exactamente el último dígito, es decir, el primer dígito que queremos generar en orden inverso, y luego dividir el x entrante por 10, descartando el último dígito Bien, cuando x se convierte en 0, es decir,
se eliminan los 3. Podemos atravesar
4 escribiendo un bucle while. Pero hay un punto muy difícil, el valor máximo de los datos Int es 2 elevado a la 31ª potencia -1, El valor mínimo es 2 negativo elevado a la 31ª potencia, sin embargo, no podemos comparar el valor con él, porque Int no puede almacenar su valor. Por lo tanto, cuando lleguemos al noveno lugar, tenemos que hacer un juicio.Si los primeros nueve lugares son mayores que él, entonces el último lugar no necesita ser juzgado en absoluto, y cruza directamente la línea. Si los primeros nueve dígitos son iguales, se juzgará durante mucho tiempo si el último dígito que sacamos es mayor que el valor máximo y si el valor excede los límites.

public class Solution {
    
    
    public int Reverse(int x) {
    
    
        int res = 0;
            int currentNumber = 0;
            while (x != 0)
            {
    
    
                currentNumber = x % 10;
                //为什么我们这里要比较前九位?而不是直接比较十位?因为十位会直接越界,所以比较前九位就行 
                if (res > 214748364 || (res == 214748364 && currentNumber > 7))
                {
    
    
                    return 0;
                }
                
                if (res < -214748364 || (res == -214748364 && currentNumber < -8))
                {
    
    
                    return 0;
                }

                res = res * 10 + currentNumber;
                x /= 10;
            }

            return res;
    }
}

Autor: conejillo de indias Xiaohuihui
Los derechos de autor pertenecen al autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización, y para reimpresiones no comerciales, indique la fuente.

Supongo que te gusta

Origin blog.csdn.net/m0_48781656/article/details/122443344
Recomendado
Clasificación