Рубрики
Без рубрики

Литкод 7. Обратное Целое число

Решение + объяснение проблемы 7. С тегом java, математика.

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;
}

Обращение целого числа аналогично обращению строки. Мы получаем последнюю цифру x % 10 и добавьте его в rev . Мы повторяем этот процесс до тех пор, пока x не станет 0. Два оператора if используются для предотвращения переполнения целых чисел.

Временная сложность : O(журнал(x))

Дополнительное пространство : O(1)

Примечание о переполнении целых чисел

Целое число возникает, когда сумма rev * 10 + pop больше/меньше максимального значения ( Целое число. МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ )/минимальное значение ( Целое число. МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ). Поэтому нам нужно проверить значения rev и поп .

  • Если rev > Целое число. МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ/10 или rev <Целое число. Значение MIN_VALUE/10 , rev *10 + pop переполнится.
  • Если откр. Значение MAX_VALUE/10 , pop должно быть меньше или равно 7, потому что 2^32 - 1 % 10 .
  • Если откр. Значение MIN_VALUE/10 , pop должно быть больше или равно -8 потому что -2^32 % 10 .

Оригинал: “https://dev.to/algobot76/leetcode-7-reverse-integer-73j”