Program liczb palindromowych w Java Używanie pętli while i for

⚡ Inteligentne podsumowanie

Program liczb palindromowych w Java Określa, czy wartość jest identyczna w obu kierunkach, poprzez odwrócenie cyfr. W tym artykule przedstawiono algorytm, wersję pętli while, wersję pętli for, metodę opartą na ciągach znaków, rekurencję, przypadki brzegowe oraz analizę złożoności z weryfikowanym wynikiem.

  • 🔁 Definicja podstawowa: Liczba palindromiczna pozostaje niezmieniona po odwróceniu kolejności cyfr, jak w przypadku liczb 131, 393 i 34043.
  • ➗ RevTechnika ersalska: Operator modułu extracostatnia cyfra, a dzielenie całkowite usuwa ją, jedną cyfrę na przejście.
  • 🧮 Zasada akumulatora: Każde przejście mnoży sumę bieżącą przez dziesięć przed dodaniem świeżo wyekstrahowanychtraccyfra ted.
  • 🔂 Wybór pętli: Pętla while i pętla for dają identyczne wyniki, pod warunkiem, że dzielenie występuje dokładnie raz na iterację.
  • 🔤 Metoda String: StringBuilder porównuje tekst bezpośrednio i działa zarówno na słowach, jak i liczbach.
  • ⚠️ Przypadki skrajne: Wartości jednocyfrowe są zawsze palindromami, wartości ujemne nigdy nimi nie są, a końcowe zera przerywają porównanie liczbowe.
  • ⏱️. Profil złożoności: Obie wersje pętli działają w czasie O(log n) proporcjonalnie do liczby cyfr i wykorzystują dodatkową przestrzeń O(1).

Program liczb palindromowych w Java

Co to jest liczba palindromowa?

A Liczba palindromowa Liczba palindromiczna to liczba, która pozostaje taka sama po odwróceniu. Na przykład 131. Po odwróceniu cyfr pozostaje taka sama. Liczba palindromiczna ma symetrię odbicia wzdłuż osi pionowej. Ta sama zasada dotyczy słowa, które ma tę samą pisownię po odwróceniu liter.

Przykłady liczb palindromowych w Java

121, 393, 34043, 111, 555, 48084

Przykłady słów palindromowych

LOL, MADAM

Każda pojedyncza cyfra od 0 do 9 jest z definicji palindromem, ponieważ odwrócenie jednej cyfry daje tę samą cyfrę.

Algorytm liczb palindromowych

Poniżej przedstawiono logikę algorytmu liczb palindromowych w Java:

  • Pobierz numer wejściowy, który należy sprawdzić pod kątem bycia a Palindrom.
  • Skopiuj liczbę do zmiennej tymczasowej i odwróć ją.
  • Porównaj liczbę odwróconą i oryginalną.
  • Jeżeli są takie same, liczba ta jest „liczbą palindromową”.
  • W przeciwnym wypadku liczba ta nie jest „liczbą palindromową”.

Samo odwrócenie to jedyna część, która wymaga uwagi. Dwie operacje arytmetyczne wykonują całą pracę, a poniższa tabela… traces je za wartość 171.

Przechodzić a (pozostała liczba) trwaćDigit = a % 10 suma = (suma * 10) + ostatniDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Po ostatnim przebiegu suma wynosi 171, co jest równe oryginalnemu wejściu, więc liczba jest potwierdzona jako palindrom.

Jak sprawdzić, czy liczba wejściowa jest palindromem, czy nie

Poniżej znajduje się program palindromowy w Java z pętlą WHILE. Pętla jest kontynuowana, dopóki pozostają cyfry, a polecenia print ujawniają stan każdej zmiennej podczas każdego przebiegu.

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 Wyjście:

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

Program sprawdzający palindrom za pomocą pętli for

Poniżej znajduje Java Program dla palindromu z pętlą for. Nagłówek zawiera test wyjścia i dzielenie, więc ciało pętli nie może dzielić się ponownie.

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 Wyjście:

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

⚠️ Ostrzeżenie: Częstym błędem jest trzymanie a = a / 10; wewnątrz ciała pętli for, podczas gdy nagłówek już zawiera a /= 10Następnie liczba jest dzielona dwukrotnie na raz, połowa cyfr jest pomijana, a prawdziwy palindrom, taki jak 121, jest błędnie zgłaszany jako niebędący palindromem.

Program palindromowy w Java Używanie ciągu Reverse

Konwersja wartości na tekst pozwala StringBuilderowi na odwrócenie jej w jednym wywołaniu. Ta sama metoda działa również w przypadku słów, których nie obsługuje podejście numeryczne.

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 Wyjście:

true
true
false

Program palindromowy w Java Korzystanie z rekurencji

Rekurencja porównuje skrajną parę znaków, a następnie wywołuje samą siebie w kurczącej się środkowej części. Metoda kończy działanie, gdy pozostają mniej niż dwa znaki.

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 Wyjście:

34043 is palindrome: true
12345 is palindrome: false

Porównanie przypadków brzegowych i metod

Trzy dane wejściowe zakłócają proste implementacje, dlatego przed użyciem należy przetestować każdą wersję pod kątem tych danych.

  1. Liczby ujemne: Wartości takie jak -121 nigdy nie są palindromami, ponieważ znak minus nie ma odpowiednika na końcu. if (inputNumber < 0) return false;.
  2. Zera końcowe: Wartość 100 jest odwracana do 1, więc porównanie prawidłowo zwraca fałsz. Tylko sama liczba 0 przechodzi między wartościami kończącymi się zerem.
  3. Przepełnienie całkowite: RevWprowadzenie dużej liczby całkowitej, takiej jak 1 999 999 999, może przekroczyć zakres liczb całkowitych. Zadeklaruj wartość „sum” jako „long”, gdy wartość wejściowa może zbliżać się do limitu.

Poniższa tabela porównuje cztery podejścia pokazane na tej stronie.

Metoda wykonania Złożoność czasowa Złożoność przestrzeni Dzieła za słowa Komentarz
Podczas pętli O (log n) O (1) Nie Najbardziej wyraźny dowód odwrócenia cyfr
Dla pętli O (log n) O (1) Nie Identyczna logika, podział tylko w nagłówku
StringBuilder odwrócony Na) Na) Tak Najkrótszy kod, przydziela nowy ciąg
Rekurencja Na) Stos O(n) Tak Przydatne do dyskusji na temat rekurencji podczas rozmów kwalifikacyjnych

Cyfra extracWzorzec encji użyty tutaj pojawia się ponownie w wielu ćwiczeniach. Kontynuuj Ciąg Fibonacciego w JavaThe Java program do sprawdzania liczby pierwszeji Bubble Algorytm sortowania w JavaAby zapoznać się ze składnią pętli, przejrzyj dla każdej pętli w Java i szerszy Java Tutorial, i zobaczyć Java smyczki dla metody opartej na tekście.

FAQ

Nie. Znak minus pojawia się tylko z przodu, więc -121 odwrócone to 121-, co nigdy nie pasuje. Dodaj wczesną ochronę, która zwraca fałsz dla każdej wartości poniżej zera.

Mnożenie przesuwa zebrane już cyfry o jedno miejsce w lewo, co zwalnia pozycję jednostek dla nowo utworzonych cyfr.traccyfra ted. To odbudowuje liczbę w odwrotnej kolejności.

Odwrócona wartość może przekroczyć maksymalną wartość int 2147483647 i dać wynik ujemny. Zadeklaruj akumulator jako wartość typu long lub porównaj wartości jako ciągi znaków.

Odczytaj wartość za pomocą Scannera i nextInt, a następnie przekaż ją do tej samej logiki odwrócenia. Umieść odczyt w bloku try, aby dane nienumeryczne nie powodowały awarii programu.

Zazwyczaj tak, gdy proszą o jawną recenzję kodu. Rzadko zgłaszają to bez pytania, więc zawsze testuj znany palindrom, taki jak 121, zamiast ufać przypadkowemu przykładowi.

Pytanie w kilku linijkach sprawdza kontrolę pętli, arytmetykę liczb całkowitych i rozumowanie przypadków skrajnych. Ujawnia również, czy kandydat weryfikuje kod wygenerowany przez sztuczną inteligencję przed jego wysłaniem.

Podsumuj ten post następująco: