Добавить в корзинуПозвонить
Найти в Дзене
Записки о Java

Решение задачи LeetCode №9: Palindrome Number на Java

Дано целое число x. Верните true, если оно является палиндромом, иначе — false.
Палиндром — это число, которое читается одинаково слева направо и справа налево. Примеры: Чтобы проверить, является ли число палиндромом, можно: 🔑 Ключевая идея: переворачиваем только половину числа, чтобы избежать переполнения и ускорить выполнение. Пример 1: x = 1221 (чётное) Сравниваем: x == reversedHalf → 12 == 12 → ✅ true Представь, что у тебя есть число, как конструктор из цифр. Ты хочешь проверить: читается ли оно одинаково с двух сторон, как "казак" или "121". 👉 Но есть правила: 👉 Пример:
Число: 12321
Левая часть: 12
Правая перевёрнутая: 12
→ Одинаково! Это палиндром! 😊 👉 А 123?
Левая: 1, правая: 3 → не одинаково → ❌ Пример, рассмотренный в статье, можно найти по адресу: https://github.com/ShkrylAndrei/leetcode/blob/main/src/main/java/info/shkryl/task9_PalindromeNumber/Solution.java
Оглавление
Рисунок: алгоритмическая задача Palindrome Number
Рисунок: алгоритмическая задача Palindrome Number

Условие задачи

Дано целое число x. Верните true, если оно является палиндромом, иначе — false.
Палиндром — это число, которое читается
одинаково слева направо и справа налево.

Примеры:

  • Ввод: 121 → Вывод: true (121 читается одинаково в обе стороны)
  • Ввод: -121 → Вывод: false (минус в начале, но в конце его нет)
  • Ввод: 10 → Вывод: false (справа 01 — это не 10)
  • Ввод: 0 → Вывод: true

Подход к решению

Чтобы проверить, является ли число палиндромом, можно:

  1. Отрицательные числа — сразу false (из-за минуса).
  2. Числа, оканчивающиеся на 0, кроме 0 — не могут быть палиндромами.
  3. Перевернуть вторую половину числа и сравнить с первой.
  4. Так мы не используем строки и избегаем переполнения.
🔑 Ключевая идея: переворачиваем только половину числа, чтобы избежать переполнения и ускорить выполнение.

Решение на Java с подробными комментариями

Рисунок: решение задачи первая часть
Рисунок: решение задачи первая часть
Рисунок: решение задачи вторая часть
Рисунок: решение задачи вторая часть

Как это работает? Разберём примеры

Пример 1: x = 1221 (чётное)

  • x=1221, reversedHalf =0, действие = начальные значения
  • x = 122, reversedHalf = 1, действие = reversedHalf = 0*10 + 1 = 1
  • x =12, reversedHald = 12, действие = reversedHalf = 1*10 + 2 = 12
  • → остановка, т.к. x (12) <= reversedHalf (12)

Сравниваем: x == reversedHalf → 12 == 12 → ✅ true

Почему так делаем?

  • ❌ Не используем строки (String.valueOf(x) и reverse) — это медленнее и тратит память.
  • ❌ Не переворачиваем всё число — может быть переполнение.
  • ✅ Переворачиваем только половину — эффективно и безопасно.
  • ✅ Работает за O(log n) — количество цифр.

Объяснение словами пятилетнего ребёнка

Представь, что у тебя есть число, как конструктор из цифр.

Ты хочешь проверить: читается ли оно одинаково с двух сторон, как "казак" или "121".

👉 Но есть правила:

  1. Если число отрицательное, как -121, то не палиндром, потому что спереди минус, а сзади его нет.
    Это как если бы ты надел шапку только спереди — сзади её не видно!
  2. Если число заканчивается на 0, как 10, то не палиндром, потому что в начале не может быть 01 — это просто 1.
  3. Теперь ты берёшь число и делаешь его пополам.
    Одну половину ты оставляешь как есть.
    А вторую —
    переворачиваешь, как будто читаешь задом наперёд.
  4. Потом смотришь: Если обе половинки одинаковые — это палиндром! 🎉
    Если число
    нечётное, как 12321, то средняя цифра (3) — как сердце, её можно игнорировать.

👉 Пример:
Число: 12321
Левая часть: 12
Правая перевёрнутая: 12
→ Одинаково! Это палиндром! 😊

👉 А 123?
Левая: 1, правая: 3 → не одинаково → ❌

Заключение

Пример, рассмотренный в статье, можно найти по адресу:

https://github.com/ShkrylAndrei/leetcode/blob/main/src/main/java/info/shkryl/task9_PalindromeNumber/Solution.java