Serie de cepillado aleatorio leetcode: inversión de enteros
Directorio de artículos
1. Descripción del tema
leetcode 7. Inversión de enteros
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 excede el rango [−2^31, 2^31 − 1] de un entero de 32 bits con signo.
Supongamos que el entorno no permite almacenar números enteros de 64 bits (con o sin signo).
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
pista:
-2^31 <= x <= 2^31 - 1
2. Análisis del tema
Ideas para resolver problemas:
La primera reacción al ver la pregunta es convertir el número en una cadena y luego voltear la cadena para obtener r, y confirmar el valor devuelto de acuerdo con el positivo o negativo del parámetro de entrada x. Si es >0, será Convierta directamente a número para obtener n, y si es <0, use parseInt para eliminar el invertido. El signo '-' al final de la cadena, luego tome el número negativo para obtener n.
let n = x > 0 ? Number(r) : parseInt(r) * -1
La condición estricta en el título "Si el entero invertido excede el rango de enteros con signo de 32 bits [−2^31, 2^31 − 1], devuelve 0":
if(n > 2147483647 || n < -2147483648) return 0
else return n
En un caso especial, el parámetro de entrada x se invierte. Cuando x es un solo dígito, es decir, cuando el valor absoluto de x |x| < 10, el valor devuelto sigue siendo x:
if (-10 < x && x < 10) return x
3. Código de resolución de problemas
El código se muestra a continuación:
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
if (-10 < x && x < 10) return x
// 转字符串
let a = x.toString()
let l = a.length
let r = ''
// 遍历反转得到r字符串
for(let i = 0; i < l; i++){
r += a[l - 1 - i]
}
let n = x > 0 ? Number(r) : parseInt(r) * -1
if(n > 2147483647 || n < -2147483648) return 0
else return n
};