Solution code
public class ReverseInteger {
public int reverse(int x) {
int min = Integer.MIN_VALUE; // -2,147,483,648
int max = Integer.MAX_VALUE; // 2,147,483,647
if (x == min || x == max) return 0;
int reversed = 0;
while (x != 0) {
int lastDigit = x % 10;
if (reversed > max/10) return 0;
if (reversed < min/10) return 0;
reversed = reversed * 10 + lastDigit;
x = x / 10;
System.out.println("lastDigit: " + lastDigit + ", reversed: " + reversed + ", x: " + x);
}
return reversed;
}
}
Test code
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class ReverseIntegerTest {
ReverseInteger reverseInteger = new ReverseInteger();
@Test
void testPositiveNumber() {
assertEquals(321, reverseInteger.reverse(123));
}
@Test
void testNegativeNumber() {
assertEquals(-321, reverseInteger.reverse(-123));
}
@Test
void testNumberWithTrailingZeros() {
assertEquals(21, reverseInteger.reverse(120));
}
@Test
void testPositiveLimit() {
assertEquals(1463847412, reverseInteger.reverse(2147483641));
}
@Test
void testNegativeLimit() {
assertEquals(-2147483641, reverseInteger.reverse(-1463847412));
}
@Test
void testOverflowPositive() {
assertEquals(0, reverseInteger.reverse(1534236469)); // overflow int
}
@Test
void testOverflowNegative() {
assertEquals(0, reverseInteger.reverse(-2147483642));
}
@Test
void testOverflowPositiveLimit() {
assertEquals(0, reverseInteger.reverse(2147483647));
}
@Test
void testOverflowNegativeLimit() {
assertEquals(0, reverseInteger.reverse(-2147483648));
}
@Test
void testZero() {
assertEquals(0, reverseInteger.reverse(0));
}
}
Solution code (TS)
function reverse(x: number): number {
const min = -2147483648;
const max = 2147483647;
if (x === min || x === max) return 0;
let reversed = 0;
while (x !== 0) {
const lastDigit = Math.trunc(x % 10);
if (reversed > max / 10) return 0;
if (reversed < min / 10) return 0;
reversed = reversed * 10 + lastDigit;
x = Math.trunc(x / 10); // ✅ truncates toward zero
}
return reversed;
}
Top comments (0)