Je n'ai pas remarqué de réponses qui résolvaient ce problème en n'utilisant pas d'espace supplémentaire, c'est-à-dire que toutes les solutions que j'ai vues utilisaient soit une chaîne, soit un autre entier pour inverser le nombre, ou d'autres structures de données.
Bien que des langages comme Java s'enroulent sur le débordement d'entier, ce comportement n'est pas défini dans des langages comme C. ( Essayez d'inverser 2147483647 (Integer.MAX_VALUE) en Java ) La
solution de contournement pourrait être d'utiliser un long ou quelque chose du genre mais, stylistiquement, je ne suis pas tout à fait comme cette approche.
Maintenant, le concept d'un nombre palindromique est que le nombre doit lire la même chose vers l'avant et vers l'arrière. Génial. En utilisant ces informations, nous pouvons comparer le premier chiffre et le dernier chiffre. L'astuce est, pour le premier chiffre, nous avons besoin de l'ordre du nombre. Disons, 12321. Diviser cela par 10 000 nous donnerait le premier 1. Le 1 de fin peut être récupéré en prenant le mod avec 10. Maintenant, pour réduire cela à 232 (12321 % 10000)/10 = (2321)/10 = 232
.. Et maintenant, le 10000 devrait être réduit d'un facteur 2. Alors, passons maintenant au code Java ...
private static boolean isPalindrome(int n) {
if (n < 0)
return false;
int div = 1;
// find the divisor
while (n / div >= 10)
div *= 10;
// any number less than 10 is a palindrome
while (n != 0) {
int leading = n / div;
int trailing = n % 10;
if (leading != trailing)
return false;
// % with div gets rid of leading digit
// dividing result by 10 gets rid of trailing digit
n = (n % div) / 10;
// got rid of 2 numbers, update div accordingly
div /= 100;
}
return true;
}
Modifié selon la suggestion de Hardik pour couvrir les cas où il y a des zéros dans le nombre.