Новости IT, Tech-лайфхаки & Кодинг

Пример решения задачи #7. Python LeetCode, Reverse Integer

Опубликовано: 13.04.2025, 11:50 | Автор: HDHai

Вариант решения задачи на Python с LeetCode

Категория: Алгоритмы.
Название задачи: Reverse Integer.
Сложность: Средняя.
Статус решения: "Решено".

Условие задачи:
Алгоритмы. Дано целое число x со знаком, представленное в 32-битном формате. Необходимо вернуть число x с обратным порядком цифр. Если при переворачивании цифр число выходит за пределы диапазона 32-битных целых чисел со знаком [-2³¹, 2³¹ - 1], то следует вернуть 0.

Предполагается, что в используемой среде выполнения нельзя хранить 64-битные целые числа (как со знаком, так и без знака).

Ограничения:
-2³¹ ≤ x ≤ 2³¹ - 1

Решение:


Python

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        # Определяем границы для 32-битного целого числа
        INT_MAX = 2**31 - 1  # Максимальное значение: 2147483647
        INT_MIN = -2**31     # Минимальное значение: -2147483648

        # Переменная для хранения результата
        result = 0

        # Сохраняем знак числа и работаем с абсолютным значением
        sign = -1 if x < 0 else 1
        x = abs(x)

        # Переворачиваем цифры числа
        while x != 0:
            # Получаем последнюю цифру числа
            last_digit = x % 10
            x //= 10  # Убираем последнюю цифру из числа

            # Проверяем, не вызовет ли добавление новой цифры переполнение
            if result > (INT_MAX - last_digit) // 10:
                return 0  # Если переполнение, возвращаем 0

            # Добавляем цифру к результату
            result = result * 10 + last_digit

        # Возвращаем результат с учетом знака
        return sign * result


Объяснение кода

Границы 32-битного числа:
Мы определяем константы INT_MAX и INT_MIN, которые представляют максимальное и минимальное значения для 32-битного целого числа. Это необходимо для проверки переполнения.

Сохранение знака:
Мы сохраняем знак исходного числа (sign), чтобы учесть его при возврате результата. Для этого используем условие: если число отрицательное, sign = -1, иначе sign = 1. Затем работаем с абсолютным значением числа (abs(x)).

Переворачивание цифр:
Используем цикл while, чтобы перевернуть цифры числа. На каждой итерации:
Извлекаем последнюю цифру числа с помощью операции % 10.
Удаляем последнюю цифру из числа с помощью целочисленного деления // 10.
Добавляем извлеченную цифру к результату, умножая текущий результат на 10 и прибавляя цифру.

Пример работы:
Input: x = 123
Output: 321

Input: x = -123
Output: -321

Input: x = 120
Output: 21

Источник решения: hdhai.com