Обратное целое
Получив 32-битное целое число со знаком
x
, вернитеx
его цифры в обратном порядке . Если реверсированиеx
приводит к тому, что значение выходит за пределы диапазона 32-разрядных целых чисел со знаком , то возвращается значение .[-231, 231 - 1]
0
Предположим, что среда не позволяет хранить 64-битные целые числа (со знаком или без знака).
Пример 1:
Вход: х = 123 Выход: 321Пример 2:
Вход: х = -123 Выход: -321Пример 3:
Вход: х = 120 Выход: 21Ограничения:-231 <= x <= 231 - 1
Решение данной задачи может быть достигнуто путем преобразования целого числа со знаком в строку, а затем обращения этой строки и преобразования ее обратно в целое число. Для этого можно использовать следующий алгоритм:
- Преобразуйте целое число в строку.
- Обратите строку.
- Преобразуйте обращенную строку в целое число.
- Проверьте, находится ли это число в диапазоне 32-разрядных целых чисел со знаком. Если нет, верните 0.
Вот реализация этого алгоритма на разных языках программирования:
Решение задачи «Обратное целое» пример кода на Python
class Solution(object): def reverse(self, x): # Проверяем, отрицательное ли число if x < 0: # Преобразуем отрицательное число в строку, убираем знак минуса, # обращаем строку, добавляем знак минуса s = str(-x) s = '-' + s[::-1] else: # Преобразуем положительное число в строку и обращаем ее s = str(x)[::-1] # Преобразуем строку в целое число res = int(s) # Проверяем, находится ли целое число в диапазоне 32-разрядных целых чисел со знаком if res < -2**31 or res > 2**31 - 1: # Если нет, то возвращаем 0 return 0 else: # Если да, то возвращаем обратное число return res
Решение задачи «Обратное целое» пример кода на Java
class Solution { public int reverse(int x) { String s; if (x < 0) { // Преобразуем отрицательное число в строку, убираем знак минуса, // обращаем строку, добавляем знак минуса s = String.valueOf(-x); s = "-" + new StringBuilder(s).reverse().toString(); } else { // Преобразуем положительное число в строку и обращаем ее s = new StringBuilder(String.valueOf(x)).reverse().toString(); } // Преобразуем строку в целое число int res = Integer.parseInt(s); // Проверяем, находится ли целое число в диапазоне 32-разрядных целых чисел со знаком if (res < -Math.pow(2, 31) || res > Math.pow(2, 31) - 1) { // Если нет, то возвращаем 0 return 0; } else { // Если да, то возвращаем обратное число return res; } } }
Решение задачи «Обратное целое» пример кода на C++
class Solution { public: int reverse(int x) { // создаем переменную для хранения результата, используем long для обработки переполнения long res = 0; // пока x не станет равным 0 while (x != 0) { // умножаем res на 10 и добавляем последнюю цифру числа x res = res * 10 + x % 10; // удаляем последнюю цифру из числа x x /= 10; } // проверяем, не выходит ли результат за пределы диапазона int if (res < INT_MIN || res > INT_MAX) { // если выходит, возвращаем 0 return 0; } // возвращаем результат, приведенный к типу int return (int) res; } };
Решение задачи «Обратное целое» пример кода на JavaScript
/** * @param {number} x * @return {number} */ var reverse = function(x) { // превращаем число в строку, разбиваем ее на массив символов, переворачиваем и объединяем обратно в строку let s = x.toString().split("").reverse().join(""); // если число отрицательное if (x < 0) { // добавляем минус перед перевернутой строкой (за исключением последней цифры, которая была знаком) s = "-" + s.substring(0, s.length - 1); } // преобразуем строку в число let res = parseInt(s); // проверяем, не выходит ли результат за пределы диапазона 32-битных чисел со знаком if (res < -Math.pow(2, 31) || res > Math.pow(2, 31) - 1) { // если выходит, возвращаем 0 return 0; } // возвращаем результат return res; };
Решение задачи «Обратное целое» пример кода на C#
public class Solution { public int Reverse(int x) { // создаем переменную для хранения результата long res = 0; // пока исходное число не обнулится while (x != 0) { // умножаем результат на 10 и добавляем последнюю цифру числа x res = res * 10 + x % 10; // убираем последнюю цифру числа x x /= 10; } // проверяем, не выходит ли результат за пределы диапазона 32-битных чисел со знаком if (res < int.MinValue || res > int.MaxValue) { // если выходит, возвращаем 0 return 0; } // возвращаем результат, приведенный к типу int return (int) res; } }
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы