DEV Community

Shelner
Shelner

Posted on

Reverse Integer

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;
    }
}
Enter fullscreen mode Exit fullscreen mode

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));
    }
}
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)