Question: Reverse Integer with Overflow Check
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-bit signed integer.
- Return
0if the result overflows.
Constraints
- Time Complexity:
O(d)wheredis the number of digits. - Space Complexity:
O(1)— constant space.
Example
Input: 123
Output: 321
Input: -123
Output: -321
Input: 1534236469
Output: 0 (overflow)
Step-by-Step Approach
- Preserve the Original: Save
xinxCopy. - Work with Absolute Value: Use
Math.abs(x)orabs(x)to simplify reversal. - Reverse Digits:
- Initialize
rev = 0. - While
x != 0:last = x % 10rev = rev * 10 + lastx //= 10
- Initialize
- Check for Overflow: Return
0if reversed number is outside 32-bit int range. - Restore Sign: Return
-revifxCopy < 0, elserev.
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
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;
}
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

1 Comment
this is my solution
export function reverse(x) {
if (x > 2 ** 31 – 1 || x < -(2 ** 31)) {
return 0;
}
const isNagative = x < 0;
const copy = Math.abs(x);
const reversedStr = copy.toString().split("").reverse().join("");
const reversedNum = parseInt(reversedStr, 10);
const result = isNagative ? -reversedNum : reversedNum;
return result;
}
console.log(reverse(-12394567890));
console.log(2 ** 31 – 1);