Palindrom-Zahlenprogramm in Java Verwenden der while- und for-Schleife

โšก Intelligente Zusammenfassung

Palindrom-Zahlenprogramm in Java Diese Methode prรผft, ob ein Wert vorwรคrts und rรผckwรคrts identisch ist, indem ihre Ziffern umgekehrt werden. Der Artikel stellt den Algorithmus, eine Version mit einer While-Schleife, eine Version mit einer For-Schleife, eine stringbasierte Methode, Rekursion, Grenzfรคlle und eine Komplexitรคtsanalyse mit verifizierter Ausgabe vor.

  • ๐Ÿ” Kerndefinition: Eine Palindromzahl bleibt unverรคndert, wenn ihre Ziffern umgekehrt werden, wie zum Beispiel bei 131, 393 und 34043.
  • โž— Reversal Technik: Der Modulo-Operator extract ist die letzte Ziffer und wird durch Ganzzahldivision entfernt, eine Ziffer pro Durchlauf.
  • ๐Ÿงฎ Akkumulatorregel: Bei jedem Durchlauf wird die laufende Summe mit zehn multipliziert, bevor die neu hinzugefรผgten Werte addiert werden.tracted digit.
  • ๐Ÿ”‚ Schleifenwahl: Eine while-Schleife und eine for-Schleife liefern identische Ergebnisse, vorausgesetzt, die Division erfolgt genau einmal pro Iteration.
  • ๐Ÿ”ค String-Methode: StringBuilder vergleicht Text direkt rรผckwรคrts und funktioniert sowohl fรผr Wรถrter als auch fรผr Zahlen.
  • โš ๏ธ Randfรคlle: Einstellige Werte sind immer Palindrome, negative Werte niemals, und nachfolgende Nullen unterbrechen den numerischen Vergleich.
  • ๏ธ Komplexitรคtsprofil: Beide Schleifenversionen haben eine Laufzeit von O(log n), die proportional zur Ziffernanzahl ist, und benรถtigen O(1) zusรคtzlichen Speicherplatz.

Palindrom-Zahlenprogramm in Java

Was ist eine Palindromzahl?

A Palindromzahl Ein Palindrom ist eine Zahl, die auch rรผckwรคrts gelesen gleich bleibt. Zum Beispiel 131. Auch wenn man die Ziffern umkehrt, bleibt die Zahl gleich. Eine Palindromzahl ist spiegelsymmetrisch an der vertikalen Achse. Dasselbe gilt fรผr ein Wort, dessen Buchstaben sich auch umkehren lassen.

Beispiele fรผr Palindromzahlen in Java

121, 393, 34043, 111, 555, 48084

Beispiele fรผr Palindromwรถrter

LOL, MADAM

Jede einzelne Ziffer von 0 bis 9 ist per Definition ein Palindrom, da die Umkehrung einer Ziffer dieselbe Ziffer ergibt.

Palindrom-Zahlenalgorithmus

Nachfolgend ist die Logik des Palindromzahlenalgorithmus aufgefรผhrt. Java:

  • Rufen Sie die Eingabenummer ab, die รผberprรผft werden muss, um a zu sein Palindrom.
  • Kopiere die Zahl in eine temporรคre Variable und kehre sie um.
  • Vergleichen Sie die umgekehrte und die ursprรผngliche Nummer.
  • Wenn sie gleich sind, handelt es sich um eine โ€žPalindromzahlโ€œ.
  • Andernfalls handelt es sich bei der Zahl nicht um eine โ€žPalindromzahlโ€œ.

Nur die Umkehrung selbst erfordert Sorgfalt. Zwei arithmetische Operationen erledigen die ganze Arbeit, siehe Tabelle unten. traces ihnen fรผr den Wert 171.

Passieren a (verbleibende Zahl) letzteDigit = a % 10 Summe = (Summe * 10) + letzteDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Nach dem letzten Durchlauf ist die Summe 171, was der ursprรผnglichen Eingabe entspricht, womit bestรคtigt wird, dass es sich um ein Palindrom handelt.

So รผberprรผfen Sie, ob die Eingabenummer Palindrom ist oder nicht

Unten finden Sie ein Palindromprogramm in Java mit einer WHILE-Schleife. Die Schleife lรคuft so lange, wie Ziffern vorhanden sind, und die print-Anweisungen geben den Zustand jeder Variablen wรคhrend jedes Durchlaufs aus.

package com.guru99;

public class PalindromeNum {

    public static void main(String[] args)
    {

        int lastDigit, sum = 0, a;
        int inputNumber = 171; //It is the number to be checked for palindrome

        a = inputNumber;

        // Code to reverse a number
        while(a > 0)
        {   System.out.println("Input Number " + a);
            lastDigit = a % 10; //getting remainder
            System.out.println("Last Digit " + lastDigit);
            System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10));
            sum = (sum * 10) + lastDigit;
            a = a / 10;

        }

        // if the given number equals sum then the number is a palindrome, otherwise not
        if(sum == inputNumber)
            System.out.println("Number is palindrome ");
        else
            System.out.println("Number is not palindrome");

    }

}

Code Ausgang:

Input Number 171
Last Digit 1
Digit 1 was added to sum 0
Input Number 17
Last Digit 7
Digit 7 was added to sum 10
Input Number 1
Last Digit 1
Digit 1 was added to sum 170
Number is palindrome

Programm zum รœberprรผfen von Palindromen mithilfe einer for-Schleife

Unten ist eine Java Programm zur Berechnung von Palindromen mithilfe einer for-Schleife. Der Schleifenkopf enthรคlt die Abbruchbedingung und die Division, daher darf der Schleifenkรถrper nicht erneut dividieren.

package com.guru99;

public class PalindromeNumForLoop {

    public static void main(String[] args)
    {

        int lastDigit, sum = 0, a;
        int inputNumber = 185; //It is the number to be checked for palindrome

        a = inputNumber;

        // Code to reverse a number
        for( ; a != 0; a /= 10 )
        {   System.out.println("Input Number " + a);
            lastDigit = a % 10; //getting remainder
            System.out.println("Last Digit " + lastDigit);
            System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10));
            sum = (sum * 10) + lastDigit;

        }

        // if the given number equals sum then the number is a palindrome, otherwise not
        if(sum == inputNumber)
            System.out.println("Number is palindrome ");
        else
            System.out.println("Number is not palindrome");

    }

}

Code Ausgang:

Input Number 185
Last Digit 5
Digit 5 was added to sum 0
Input Number 18
Last Digit 8
Digit 8 was added to sum 50
Input Number 1
Last Digit 1
Digit 1 was added to sum 580
Number is not palindrome

โš ๏ธ Warnung: Ein hรคufiger Fehler ist es, zu behalten a = a / 10; innerhalb des Schleifenkรถrpers, wรคhrend der Header bereits enthรคlt a /= 10Die Zahl wird dann in jedem Durchlauf zweimal geteilt, die Hรคlfte der Ziffern wird รผbersprungen, und ein echtes Palindrom wie 121 wird fรคlschlicherweise als kein Palindrom gemeldet.

Palindrom-Programm in Java Verwendung von Zeichenketten Reverse

Durch die Umwandlung des Werts in Text kann StringBuilder ihn mit einem einzigen Aufruf umkehren. Dieselbe Methode funktioniert auch fรผr Wรถrter, die mit dem numerischen Ansatz nicht verarbeitet werden kรถnnen.

package com.guru99;

public class PalindromeString {

    public static boolean isPalindrome(String text) {
        // ignore case so MADAM and madam behave identically
        String clean = text.toLowerCase();
        String reversed = new StringBuilder(clean).reverse().toString();
        return clean.equals(reversed);
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome("121"));
        System.out.println(isPalindrome("MADAM"));
        System.out.println(isPalindrome("Java"));
    }
}

Code Ausgang:

true
true
false

Palindrom-Programm in Java Verwendung von Rekursion

Die Rekursion vergleicht das รคuรŸerste Zeichenpaar und ruft sich dann selbst fรผr den schrumpfenden Mittelteil auf. Die Methode stoppt, sobald weniger als zwei Zeichen รผbrig sind.

package com.guru99;

public class PalindromeRecursion {

    public static boolean isPalindrome(String text, int left, int right) {
        // base case: pointers met or crossed
        if (left >= right) {
            return true;
        }
        if (text.charAt(left) != text.charAt(right)) {
            return false;
        }
        return isPalindrome(text, left + 1, right - 1);
    }

    public static void main(String[] args) {
        String value = "34043";
        System.out.println(value + " is palindrome: "
                + isPalindrome(value, 0, value.length() - 1));

        String other = "12345";
        System.out.println(other + " is palindrome: "
                + isPalindrome(other, 0, other.length() - 1));
    }
}

Code Ausgang:

34043 is palindrome: true
12345 is palindrome: false

Grenzfรคlle und Methodenvergleich

Drei Eingรคnge fรผhren bei naiven Implementierungen zu Problemen, daher sollte jede Version vor der Verwendung anhand dieser Eingรคnge getestet werden.

  1. Negative Zahlen: Werte wie -121 sind niemals Palindrome, da das Minuszeichen am Ende kein Gegenstรผck hat. if (inputNumber < 0) return false;.
  2. Nachfolgende Nullen: Der Wert 100 wird zu 1 umgekehrt, daher liefert der Vergleich korrekterweise โ€žfalseโ€œ. Nur die Zahl 0 selbst ist unter den Werten, die auf Null enden, zulรคssig.
  3. Ganzzahlรผberlauf: RevDie Verwendung einer groรŸen Ganzzahl wie 1,999,999,999 kann den Wertebereich von Ganzzahlen รผberschreiten. Deklarieren Sie die Summe als Long-Wert, wenn die Eingabe sich der Grenze nรคhern kรถnnte.

Die folgende Tabelle vergleicht die vier auf dieser Seite dargestellten Ansรคtze.

Methodik Zeitliche Komplexitรคt Raumkomplexitรคt Werke fรผr Wรถrter Notizen
While-Schleife O (log n) O (1) Nein Klarste Demonstration der Ziffernumkehr
Fรผr Schleife O (log n) O (1) Nein Identische Logik, Division nur im Header
StringBuilder umgekehrt O (n) O (n) Ja Kรผrzester Code, der einen neuen String zuweist.
Rekursion O (n) O(n) Stapel Ja Nรผtzlich fรผr Interviewgesprรคche zum Thema Rekursion

Die Ziffer extracDas hier verwendete Muster taucht in vielen รœbungen wieder auf. Fahren Sie mit dem Fibonacci-Folge in Java, hat das Java Programm zur รœberprรผfung einer Primzahlund die Bubble Sortieralgorithmus in JavaDie Syntax der Schleife selbst finden Sie in der folgenden Dokumentation: fรผr jede Schleife in Java und je breiter Java Lernprogramm, und sehen Java Streicher fรผr die textbasierte Methode.

Hรคufig gestellte Fragen

Nein. Das Minuszeichen steht nur am Anfang, daher ist -121 rรผckwรคrts 121-, was niemals รผbereinstimmt. Fรผgen Sie eine frรผhe Bedingung hinzu, die fรผr jeden Wert kleiner als Null โ€žfalseโ€œ zurรผckgibt.

Durch die Multiplikation werden die bereits gesammelten Ziffern um eine Stelle nach links verschoben, wodurch die Einerstelle fรผr die neu hinzugekommene Ziffer frei wird.tracted Ziffer. Dies setzt die Zahl in umgekehrter Reihenfolge wieder zusammen.

Der umgekehrte Wert kann den Maximalwert von 2147483647 รผberschreiten und zu einem negativen Ergebnis fรผhren. Deklarieren Sie den Akkumulator als Long-Wert oder vergleichen Sie die Werte stattdessen als Strings.

Lies den Wert mit Scanner und nextInt ein und รผbergib ihn anschlieรŸend an dieselbe Umkehrlogik. SchlieรŸe den Lesevorgang in einen try-Block ein, damit nicht-numerische Eingaben das Programm nicht zum Absturz bringen.

Normalerweise ja, wenn man explizit um eine Codeรผberprรผfung gebeten wird. Sie melden Fehler selten unaufgefordert, daher sollte man immer ein bekanntes Palindrom wie 121 testen, anstatt sich auf ein scheinbar fehlerfreies Beispiel zu verlassen.

Die Aufgabe prรผft Schleifensteuerung, Ganzzahlarithmetik und das Erkennen von Grenzfรคllen in wenigen Zeilen. Sie zeigt auch, ob ein Kandidat den von der KI generierten Code vor der Einreichung รผberprรผft.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: