【Una pregunta por día】 Número de palíndromos

https://leetcode-cn.com/problems/palindrome-number/
Palindrome Number
Determina si un número entero es un número de palíndromo. El número de palíndromos se refiere a enteros que se leen en el mismo orden (de izquierda a derecha) y en orden inverso (de derecha a izquierda).

Ejemplo 1:

Entrada: 121
Salida: verdadero
Ejemplo 2:

Entrada: -121
Salida: falso
Explicación: La lectura de izquierda a derecha es -121. De derecha a izquierda, es 121-. Por lo tanto, no es un palíndromo.
Ejemplo 3

Entrada: 10
Salida: falso
Explicación: De derecha a izquierda, es 01. Por lo tanto, no es un palíndromo.


Solución 1

8ms 6.1mb

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) {
        	return false;
        }

        long int res = 0, my_x = x;
        while (x != 0) {
        	int d = x % 10;
        	res = res * 10 + d;
        	x = x / 10;
        }
        if (res == my_x) {
        	return true;
        } else {
        	return false;
        }
    }
};

Solución 1.5


Se agrega un juicio a 20ms 5.9mb , [0, 10)puede devolver directamente verdadero, si hay algo similar a 100, 1000, etc. devuelve directamente falso.
En comparación con la solución uno, inicialmente pensé que sería más rápido, por lo que no necesité hacer un bucle.
De hecho, también lleva mucho tiempo juzgar la necesidad de calcular en el caso de prueba.

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 10 && x >= 0) {
        	return true;
        }
        if (x < 0 || x % 10 == 0) {
        	return false;
        }

        long int res = 0, my_x = x;
        while (x != 0) {
        	int d = x % 10;
        	res = res * 10 + d;
        	x = x / 10;
        }
        printf("res %d\n", res);

        return res == my_x;
    }
};

Solución 2

Convierte en una cadena para resolver.
Por supuesto, también puedes usar la pila, pero no la necesito, solo juzga.
Si usa la pila, debe pasar por O (n). Solo necesito pasar por O (n / 2) de esta manera, pero la complejidad del tiempo es en realidad O (n).
28ms, 6mb

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 10 && x >= 0) {
        	return true;
        }
        if (x < 0 || x % 10 == 0) {
        	return false;
        }

        std::string x_str = std::to_string(x);
        int start = 0;
        int end = x_str.size() - 1;
        while (start < end) {
        	if (x_str[start] != x_str[end]) {
        		return false;
        	}
        	start ++;
        	end --;
        }

        return true;
    }
};

EOF

Se han publicado 98 artículos originales · 91 alabanzas · Más de 40,000 visitas

Supongo que te gusta

Origin blog.csdn.net/Hanoi_ahoj/article/details/105299462
Recomendado
Clasificación