9. Palindrome Number

Обновлено: 2024-03-12
2 мин
[Math Easy]

LeetCode задача

Задача

Определите, является ли целое число палиндромом, не преобразуя его в строку.

Подсказки

Переворачивая число и сравнивая его с оригиналом, мы можем определить, является ли оно палиндромом.

Подход

Вместо того чтобы преобразовывать число в строку, мы можем перевернуть его цифры с использованием математических операций, а затем сравнить перевернутое число с оригинальным.

Алгоритм

  1. Если число отрицательное, то это не палиндром.
  2. Инициализируем переменную для перевернутого числа: мы будем создавать это число шаг за шагом.
  3. Переворачиваем число:
    • Это достигается путем последовательного взятия последней цифры числа и добавления её к текущему общему количеству после сдвига текущих цифр этого общего числа.
    • Например, если у вас есть число 123, мы сначала возьмем 3, затем 2, и, наконец, 1, чтобы создать перевернутое число 321.
  4. Сравним: Если перевернутое число равно оригинальному, то это палиндром.

Решение

def isPalindrome(x: int) -> bool:
    # Отрицательные числа не могут быть палиндромами
    if x < 0:
        return False

    # Инициализируем переменную для перевернутого числа со значением 0
    reversed_num = 0

    # Используем временную переменную, чтобы не менять оригинальное число
    temp = x

    # Переворачиваем число
    while temp:
        # Извлекаем последнюю цифру текущего числа
        last_digit = temp % 10  # 12345 % 10 => 5

        # Сдвигаем текущие цифры перевернутого числа и добавляем последнюю цифру из temp
        reversed_num = reversed_num * 10 + last_digit  # 1. 0 * 10 + 5 => 5, 2. 5 * 10 + 4 => 54
        
        # Удаляем последнюю цифру из temp
        temp //= 10  # 12345 // 10 => 1234

    # Сравниваем перевернутое число с оригиналом
    return reversed_num == x
Ранее 1. Two Sum