Reverse Integer
Problem Statement
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0.
Approach
To reverse an integer, we can repeatedly extract the last digit using the modulo operator (% 10) and append it to our reversed number by multiplying the current reversed number by 10 and adding the extracted digit.
Steps:
-
Initialize:
- Create a variable
reversed_numand set it to 0. - Keep track of the sign of
x.
- Create a variable
-
Iterate:
- While
xis not zero:- Extract the last digit:
digit = abs(x) % 10 - Update
x:x = int(x / 10)(truncating towards zero) - Append the digit:
reversed_num = (reversed_num * 10) + digit
- Extract the last digit:
- While
-
Check Bounds:
- If
reversed_numgoes beyond the 32-bit signed integer range[-2^31, 2^31 - 1], return0.
- If
-
Return:
- Restore the sign and return
reversed_num.
- Restore the sign and return
Java Implementation
class Solution {
public int reverse(int x) {
int reversedNum = 0;
while (x != 0) {
int digit = x % 10;
x /= 10;
// Check for integer overflow before multiplying by 10
if (reversedNum > Integer.MAX_VALUE / 10 || (reversedNum == Integer.MAX_VALUE / 10 && digit > 7)) {
return 0;
}
if (reversedNum < Integer.MIN_VALUE / 10 || (reversedNum == Integer.MIN_VALUE / 10 && digit < -8)) {
return 0;
}
reversedNum = reversedNum * 10 + digit;
}
return reversedNum;
}
}
Python Implementation
class Solution:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2**31, 2**31 - 1
reversed_num = 0
sign = -1 if x < 0 else 1
x = abs(x)
while x != 0:
digit = x % 10
x //= 10
reversed_num = reversed_num * 10 + digit
reversed_num *= sign
if reversed_num < INT_MIN or reversed_num > INT_MAX:
return 0
return reversed_num
C++ Implementation
#include <climits>
class Solution {
public:
int reverse(int x) {
int reversed_num = 0;
while (x != 0) {
int digit = x % 10;
x /= 10;
if (reversed_num > INT_MAX / 10 || (reversed_num == INT_MAX / 10 && digit > 7)) return 0;
if (reversed_num < INT_MIN / 10 || (reversed_num == INT_MIN / 10 && digit < -8)) return 0;
reversed_num = reversed_num * 10 + digit;
}
return reversed_num;
}
};
JavaScript Implementation
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
const INT_MIN = -Math.pow(2, 31);
const INT_MAX = Math.pow(2, 31) - 1;
let reversed_num = 0;
let sign = x < 0 ? -1 : 1;
x = Math.abs(x);
while (x !== 0) {
let digit = x % 10;
x = Math.floor(x / 10);
reversed_num = reversed_num * 10 + digit;
}
reversed_num *= sign;
if (reversed_num < INT_MIN || reversed_num > INT_MAX) {
return 0;
}
return reversed_num;
};
Time Complexity:
Space Complexity: