Problem Statement:
Write a function reverse(x) that takes a
32-bit signed integer and returns its digits reversed.
If the reversed value overflows the 32-bit signed integer range,
return 0.
Requirements:
- Reverse the digits of a
32-bitsigned integer. - Return
0if the result overflows.
Constraints:
Time Complexity: O(d)Where dis the numberof digits.
Space Complexity: O(1) — Constant space.
Example:
Input:123
Output:321
Input:-123
Output:-321
Input:1534236469
Output:0 (overflow)
Approach:
-
Preserve the Original: Save
xinxCopy. -
Work with Absolute Value: Use
Math.abs(x)orabs(x)to simplify reversal. -
Reverse Digits: Intialize
rev = 0.Whilex != 0 : last = x % 10 rev = rev * 10 + last x //= 10 -
Check for Overflow: Return
0if reversed number is outside32-bitint range. -
Restore Sign: Return
-revifxCopy < 0, elserev.
Visualisation:
var reverse = function(x) {
let xCopy = x;
x = Math.abs(x);
let rev = 0;
while (x > 0) {
let last = x % 10;
rev = rev * 10 + last;
x = Math.floor(x / 10);
}
if (rev > 2**31 - 1) return 0;
return xCopy < 0 ? -rev : rev;
};
console.log(reverse(123)); // 321
class Solution(object):
def reverse(self, x):
rev = 0
n = abs(x)
while n != 0:
last = n % 10
rev = rev * 10 + last
n //= 10
if rev > 2**31 - 1:
return 0
return -rev if x < 0 else rev
sol = Solution()
print(sol.reverse(123)) # Output: 321
public class Solution {
public int reverse(int x) {
long rev = 0;
int n = Math.abs(x);
while (n != 0) {
int last = n % 10;
rev = rev * 10 + last;
n /= 10;
}
if (rev > Integer.MAX_VALUE) return 0;
return x < 0 ? (int)-rev : (int)rev;
}
}
class Solution {
public:
int reverse(int x) {
long long rev = 0;
long long n = x;
while (n != 0) {
int last = n % 10;
rev = rev * 10 + last;
n /= 10;
}
if (rev > INT_MAX || rev < INT_MIN) return 0;
return (int)rev;
}
};
#include <limits.h>
int reverse(int x) {
long long rev = 0;
long long n = x;
while (n != 0) {
int last = n % 10;
rev = rev * 10 + last;
n /= 10;
}
if (rev > INT_MAX || rev < INT_MIN) return 0;
return (int)rev;
}
using System;
class Program {
static int ReverseInteger(int x) {
int result = 0;
while (x != 0) {
int digit = x % 10;
x /= 10;
if (result > int.MaxValue / 10 || (result == int.MaxValue / 10 && digit > 7)) {
return 0;
}
if (result < int.MinValue / 10 || (result == int.MinValue / 10 && digit < -8)) {
return 0;
}
result = result * 10 + digit;
}
return result;
}
static void Main() {
int input = 123;
Console.WriteLine("Reversed: " + ReverseInteger(input)); // Output: 321
input = -120;
Console.WriteLine("Reversed: " + ReverseInteger(input)); // Output: -21
input = 1534236469;
Console.WriteLine("Reversed: " + ReverseInteger(input)); // Output: 0 (overflow)
}
}
