【Une question par jour】 Nombre de palindromes

https://leetcode-cn.com/problems/palindrome-number/
Palindrome Number
Détermine si un entier est un nombre palindrome. Le nombre de palindromes fait référence à des nombres entiers qui se lisent dans le même ordre (de gauche à droite) et dans l'ordre inverse (de droite à gauche).

Exemple 1:

Entrée: 121
Sortie: vrai
Exemple 2:

Entrée: -121
Sortie: faux
Explication: La lecture de gauche à droite est -121. De droite à gauche, c'est 121-. Ce n'est donc pas un palindrome.
Exemple 3:

Entrée: 10
Sortie: faux
Explication: De droite à gauche, c'est 01. Ce n'est donc pas un palindrome.


Solution 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;
        }
    }
};

Solution 1.5


Un jugement [0, 10)est ajouté à 20 ms 5,9 Mo , il peut retourner directement vrai, s'il y a quelque chose de similaire à 100, 1000, etc. renvoie directement faux.
Par rapport à la première solution, j'ai d'abord pensé que ce serait plus rapide, donc je n'avais pas besoin de boucler.
En fait, il faut également beaucoup de temps pour juger de la nécessité de calculer dans le cas de test.

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;
    }
};

Solution 2

Convertissez en chaîne pour résoudre.
Bien sûr, vous pouvez également utiliser la pile, mais je n'en ai pas besoin, il suffit de juger.
Si vous utilisez la pile, vous devez passer par O (n), je n'ai qu'à passer par O (n / 2) de cette façon, mais la complexité temporelle est en fait O (n).
28 ms, 6 Mo

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

98 articles originaux ont été publiés · 91 éloges · 40 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/Hanoi_ahoj/article/details/105299462
conseillé
Classement