Πρόγραμμα αριθμού Palindrome in Java Χρήση while & for Loop

⚡ Έξυπνη Σύνοψη

Πρόγραμμα αριθμού Palindrome in Java καθορίζει εάν μια τιμή διαβάζεται πανομοιότυπα προς τα εμπρός και προς τα πίσω αντιστρέφοντας τα ψηφία της. Αυτό το άρθρο παρουσιάζει τον αλγόριθμο, μια έκδοση βρόχου while, μια έκδοση βρόχου for, μια μέθοδο που βασίζεται σε συμβολοσειρές, αναδρομή, περιπτώσεις ακμών και ανάλυση πολυπλοκότητας με επαληθευμένη έξοδο.

  • 🔁 Βασικός Ορισμός: Ένας παλίνδρομος αριθμός παραμένει αμετάβλητος μετά την αντιστροφή των ψηφίων του, όπως συμβαίνει με τα 131, 393 και 34043.
  • RevΤεχνική ersal: Ο τελεστής modulus extracτο τελευταίο ψηφίο και η ακέραια διαίρεση το αφαιρεί, ένα ψηφίο ανά πέρασμα.
  • 🧮 Κανόνας συσσωρευτή: Κάθε πάσο πολλαπλασιάζει το τρέχον άθροισμα επί δέκα πριν προσθέσει το φρέσκο ​​​​εξαιρούμενοtracψηφίο ted.
  • 🔂 Επιλογή βρόχου: Ένας βρόχος while και ένας βρόχος for παράγουν πανομοιότυπα αποτελέσματα, αρκεί η διαίρεση να εμφανίζεται ακριβώς μία φορά ανά επανάληψη.
  • 🔤 Μέθοδος συμβολοσειράς: Το StringBuilder συγκρίνει το κείμενο απευθείας και λειτουργεί τόσο για λέξεις όσο και για αριθμούς.
  • ⚠️ Θήκες άκρων: Οι μονοψήφιες τιμές είναι πάντα παλίνδρομα, οι αρνητικές τιμές δεν είναι ποτέ, και τα μηδενικά που έρχονται στο τέλος διακόπτουν την αριθμητική σύγκριση.
  • Προφίλ Πολυπλοκότητας: Και οι δύο εκδόσεις βρόχου εκτελούνται σε χρόνο O(log n) ανάλογο με τον αριθμό των ψηφίων και χρησιμοποιούν επιπλέον χώρο O(1).

Πρόγραμμα αριθμού Palindrome in Java

Τι είναι ο παλινδρομικός αριθμός;

A Αριθμός Palindrome είναι ένας αριθμός που παραμένει ο ίδιος όταν αντιστραφεί. Για παράδειγμα, 131. Όταν τα ψηφία του αντιστραφούν, παραμένει ο ίδιος αριθμός. Ένας παλίνδρομος αριθμός έχει συμμετρία ανάκλασης στον κατακόρυφο άξονα. Η ίδια ιδέα ισχύει για μια λέξη που έχει την ίδια ορθογραφία όταν τα γράμματά της αντιστραφούν.

Παραδείγματα παλινδρομικού αριθμού σε Java

121, 393, 34043, 111, 555, 48084

Παραδείγματα λέξεων παλίνδρομου

LOL, MADAM

Κάθε μονοψήφια τιμή από το 0 έως το 9 είναι εξ ορισμού παλίνδρομο, επειδή η αντιστροφή ενός ψηφίου παράγει το ίδιο ψηφίο.

Αλγόριθμος Παλίνδρομου Αριθμού

Παρακάτω είναι η λογική του αλγορίθμου παλινδρομικού αριθμού στο Java:

  • Λάβετε τον αριθμό εισαγωγής που πρέπει να ελεγχθεί ως α παλίνδρομο.
  • Αντιγράψτε τον αριθμό σε μια προσωρινή μεταβλητή και αντιστρέψτε τον.
  • Συγκρίνετε τον αντίστροφο και τον αρχικό αριθμό.
  • Αν είναι ίδιοι, ο αριθμός είναι ένας «αριθμός παλίνδρομου».
  • Διαφορετικά, ο αριθμός δεν είναι «αριθμός παλίνδρομου».

Η ίδια η αντιστροφή είναι το μόνο μέρος που χρειάζεται προσοχή. Δύο αριθμητικές πράξεις κάνουν όλη τη δουλειά και ο παρακάτω πίνακας tracτα ισούται με την τιμή 171.

Πέρασμα ένα (υπόλοιπος αριθμός) τελευταίαDigit = a % 10 άθροισμα = (άθροισμα * 10) + τελευταίοDigit α = α / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Μετά το τελικό πέρασμα, το άθροισμα ισχύει 171, το οποίο ισούται με την αρχική είσοδο, επομένως ο αριθμός επιβεβαιώνεται ως παλίνδρομο.

Πώς να ελέγξετε εάν ο αριθμός εισόδου είναι Palindrome ή όχι

Παρακάτω είναι ένα παλινδρομικό πρόγραμμα σε Java με έναν βρόχο WHILE. Ο βρόχος συνεχίζεται όσο παραμένουν τα ψηφία και οι εντολές print εκθέτουν την κατάσταση κάθε μεταβλητής κατά τη διάρκεια κάθε περάσματος.

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 Παραγωγή:

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

Πρόγραμμα για τον έλεγχο του Palindrome χρησιμοποιώντας βρόχο for

Παρακάτω είναι μια Java πρόγραμμα για παλίνδρομο χρησιμοποιώντας έναν βρόχο for. Η κεφαλίδα φέρει τον έλεγχο εξόδου και τη διαίρεση, επομένως το σώμα του βρόχου δεν πρέπει να διαιρεθεί ξανά.

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 Παραγωγή:

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

⚠️ Προειδοποίηση: Ένα συχνό λάθος είναι να κρατάμε a = a / 10; μέσα στο σώμα του βρόχου for ενώ η κεφαλίδα περιέχει ήδη a /= 10Ο αριθμός στη συνέχεια διαιρείται δύο φορές ανά πέρασμα, τα μισά ψηφία παραλείπονται και ένα γνήσιο παλίνδρομο όπως το 121 αναφέρεται εσφαλμένα ως μη παλίνδρομο.

Πρόγραμμα Palindrome σε Java Χρήση συμβολοσειράς Reverse

Η μετατροπή της τιμής σε κείμενο επιτρέπει στο StringBuilder να την αντιστρέψει με μία μόνο κλήση. Η ίδια μέθοδος λειτουργεί και για λέξεις, τις οποίες η αριθμητική προσέγγιση δεν μπορεί να χειριστεί.

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 Παραγωγή:

true
true
false

Πρόγραμμα Palindrome σε Java Χρήση Αναδρομής

Η αναδρομή συγκρίνει το εξώτερο ζεύγος χαρακτήρων και στη συνέχεια καλεί τον εαυτό της στο συρρικνούμενο μεσαίο τμήμα. Η μέθοδος σταματά όταν απομένουν λιγότεροι από δύο χαρακτήρες.

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 Παραγωγή:

34043 is palindrome: true
12345 is palindrome: false

Περιπτώσεις ακμής και σύγκριση μεθόδων

Τρεις είσοδοι διακόπτουν τις απλοϊκές υλοποιήσεις, επομένως κάθε έκδοση θα πρέπει να δοκιμάζεται σε σχέση με αυτές πριν από τη χρήση.

  1. Αρνητικοί αριθμοί: Τιμές όπως -121 δεν είναι ποτέ παλίνδρομα, επειδή το σύμβολο μείον δεν έχει αντίστοιχο στο τέλος. Προσέξτε με if (inputNumber < 0) return false;.
  2. Τελικά μηδενικά: Η τιμή 100 αντιστρέφεται σε 1, επομένως η σύγκριση επιστρέφει σωστά την τιμή false. Μόνο ο ίδιος ο αριθμός 0 περνάει ανάμεσα σε τιμές που τελειώνουν σε μηδέν.
  3. Υπερχείλιση ακεραίων: RevΗ χρήση ενός μεγάλου ακέραιου αριθμού, όπως 1,999,999,999, μπορεί να υπερβεί το εύρος ακεραίων. Δηλώστε το άθροισμα ως long όταν η είσοδος μπορεί να πλησιάσει το όριο.

Ο παρακάτω πίνακας συγκρίνει τις τέσσερις προσεγγίσεις που παρουσιάζονται σε αυτήν τη σελίδα.

Μέθοδος Χρόνος πολυπλοκότητας Διαστημική πολυπλοκότητα Έργα για λέξεις Σημειώσεις
Ενώ βρόχος O (ημερολόγιο n) Ο (1) Οχι Η πιο ξεκάθαρη επίδειξη αντιστροφής ψηφίων
Για βρόχο O (ημερολόγιο n) Ο (1) Οχι Πανομοιότυπη λογική, διαίρεση μόνο στην κεφαλίδα
Αντίστροφη λειτουργία StringBuilder O (n) O (n) Ναι Ο συντομότερος κώδικας, εκχωρεί μια νέα συμβολοσειρά
Αναδρομή O (n) Στοίβα O(n) Ναι Χρήσιμο για συζητήσεις συνεντεύξεων σχετικά με την αναδρομή

Το ψηφίο extracΤο μοτίβο αγωγής που χρησιμοποιείται εδώ επανεμφανίζεται σε πολλές ασκήσεις. Συνεχίστε με Η σειρά Φιμπονάτσι στο Java, Java πρόγραμμα για τον έλεγχο ενός πρώτου αριθμού, και το Bubble Αλγόριθμος ταξινόμησης σε JavaΓια την ίδια τη σύνταξη του βρόχου, εξετάστε το για κάθε βρόχο στο Java και το ευρύτερο Java φροντιστήριο, και δες Java χορδές για τη μέθοδο που βασίζεται σε κείμενο.

Συχνές Ερωτήσεις

Όχι. Το πρόσημο μείον εμφανίζεται μόνο στο μπροστινό μέρος, επομένως το -121 αντεστραμμένο σημαίνει 121-, το οποίο δεν ταιριάζει ποτέ. Προσθέστε έναν πρώιμο φύλακα που επιστρέφει false για οποιαδήποτε τιμή κάτω από το μηδέν.

Ο πολλαπλασιασμός μετατοπίζει τα ψηφία που έχουν ήδη συλλεχθεί μία θέση προς τα αριστερά, γεγονός που απελευθερώνει τη θέση των μονάδων για τον νέο ψηφίο.tracψηφίο ted. Αυτό ανακατασκευάζει τον αριθμό με αντίστροφη σειρά.

Η αντίστροφη τιμή μπορεί να υπερβεί το μέγιστο ακέραιο 2147483647 και να αναδιπλωθεί σε αρνητικό αποτέλεσμα. Δηλώστε τον συσσωρευτή ως long ή συγκρίνετε τις τιμές ως συμβολοσειρές.

Διαβάστε την τιμή με το Scanner και το nextInt και, στη συνέχεια, περάστε την στην ίδια λογική αντιστροφής. Τυλίξτε την ανάγνωση σε ένα μπλοκ try, έτσι ώστε η μη αριθμητική είσοδος να μην προκαλέσει σφάλμα στο πρόγραμμα.

Συνήθως ναι, όταν τους ζητείται να ελέγξουν ρητά τον κώδικα. Σπάνια τον επισημαίνουν χωρίς προτροπή, επομένως πάντα δοκιμάζετε ένα γνωστό παλίνδρομο όπως το 121 αντί να εμπιστεύεστε ένα περαστικό παράδειγμα.

Η ερώτηση εξετάζει τον έλεγχο βρόχων, την αριθμητική ακεραίων και τη συλλογιστική πεζών-κεφαλαίων σε λίγες γραμμές. Αποκαλύπτει επίσης εάν ένας υποψήφιος επαληθεύει τον κώδικα που δημιουργείται από την Τεχνητή Νοημοσύνη πριν τον υποβάλει.

Συνοψίστε αυτήν την ανάρτηση με: