Ich habe keine Antworten bemerkt, die dieses Problem ohne zusätzlichen Speicherplatz gelöst haben, dh alle Lösungen, die ich gesehen habe, haben entweder eine Zeichenfolge oder eine andere Ganzzahl verwendet, um die Zahl umzukehren, oder einige andere Datenstrukturen.
Obwohl Sprachen wie Java auf Integer - Überlauf umwickeln, ist dieses Verhalten in Sprachen wie C (undefined Versuchen Umkehren 2147483647 (Integer.MAX_VALUE) in Java )
könnte Abhilfe sein , eine lange oder etwas zu verwenden , aber stilistisch, weiß ich nicht ganz wie dieser Ansatz.
Das Konzept einer palindromischen Zahl ist nun, dass die Zahl vorwärts und rückwärts gleich lauten sollte. Toll. Mit diesen Informationen können wir die erste und die letzte Ziffer vergleichen. Trick ist, für die erste Ziffer brauchen wir die Reihenfolge der Nummer. Sagen wir, 12321. Wenn wir dies durch 10000 teilen, erhalten wir die führende 1. Die nachfolgende 1 kann abgerufen werden, indem der Mod mit 10 genommen wird. Nun, um dies auf 232 zu reduzieren (12321 % 10000)/10 = (2321)/10 = 232
. Und jetzt müsste der 10000 um den Faktor 2 reduziert werden. Nun zum Java-Code ...
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;
}
Bearbeitet gemäß Hardiks Vorschlag, um die Fälle abzudecken, in denen die Zahl Nullen enthält.