Вопрос:
Ссылка: https://leetcode.com/problems/reverse-integer/description/
Получив 32-битное целое число со знаком x, верните xс перевернутыми цифрами. Если обращение x приводит к тому, что значение выходит за пределы диапазона 32-разрядных целых чисел со знаком [-231, 231 - 1], возвращается 0.
Предположим, что среда не позволяет хранить 64-битные целые числа (со знаком или без знака).
Пример 1:
Input: x = 123 Output: 321
Пример 2:
Input: x = -123 Output: -321
Пример 3:
Input: x = 120 Output: 21
Ограничения:
-231 <= x <= 231 - 1
Решение:
Подход:
- Метод
reverseпринимает целое числоxв качестве входных данных и возвращает обратное значение этого целого числа. - Он инициализирует переменную
revзначением 0, в котором будет храниться инвертированное целое число. - В коде используется цикл while для обращения целого числа. Цикл продолжается до тех пор, пока
xне станет равным 0, что означает, что все цифры обработаны. - Внутри цикла код выполняет две операции:
int pop = x % 10;: последняя цифра числаxвычисляется путем деления остатка на 10.x /= 10;: удаляется последняя цифра числаxпутем деления на 10.- Затем код проверяет, не приведет ли добавление цифры
popкrevк переполнению или потере значимости. Он сравниваетrevс максимальным и минимальным значениями, которые может содержать целое число (Integer.MAX_VALUEиInteger.MIN_VALUEсоответственно), разделенными на 10. Если добавлениеpopвызовет переполнение или потерю значимости, метод возвращает 0. - Если проверка проходит успешно, код обновляет
rev, умножая его на 10 и добавляя цифруpop. Это эффективно добавляет цифру в текущей позиции к инвертированному целому числу. - После завершения цикла while обратное целое сохраняется в
revи возвращается как результат.
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
Временная сложность: O(logN)
Космическая сложность: O(1)
Заключение:
Надеюсь, что этот блог поможет вам решить вопрос, а также развеет ваши сомнения относительно решения. Пожалуйста, прокомментируйте, если вы знаете какие-либо новые подходы. Если у вас есть какие-либо сомнения, пожалуйста, прокомментируйте, и мы обсудим их.
Удачного кодирования.