본문 바로가기

Algorithm/Leet Code

[LeetCode] 7. Reverse Integer (코딩테스트, 릿코드, tech interview)

  • 프로그래밍 처음 시작할 때, 막 풀었던 것보다 코드도 깨끗해지고 퍼포먼스도 훨씬 올라가서 나름 좋았다.

3번에 걸쳐서 리팩토링 했고, 최대 퍼포먼스 뽑아냄

하지만 개인적으로는 2번째 코드가 좀 더 정리하면 가장 읽기 편할 것으로 보여서 좋아보인다.

package algorithm_sites.leetcode;

public class LC_0007_ReverseInteger {

    public int reverse_3(int x) {
        if (x == 0) {
            return 0;
        }

        boolean isPositive = x > 0;

        int result = 0;
        int pop;

        try {
            while (x != 0) {
                pop = x % 10;
                x /= 10;

                if (isPositive && result > (Integer.MAX_VALUE - pop) / 10) {
                    return 0;
                }
                if (!isPositive && result < (Integer.MIN_VALUE - pop) / 10) {
                    return 0;
                }

                result = (result * 10 + pop);
            }
        } catch (NumberFormatException e) {
            return 0;
        }

        return result;
    }

    public int reverse_2(int x) {
        if (x == 0) {
            return 0;
        }

        boolean isPositive = x > 0;

        StringBuilder sb = new StringBuilder(Integer.toString(Math.abs(x))).reverse();

        int result;

        try {
            result = Integer.parseInt(sb.toString());

            if (!isPositive) {
                return result * -1;
            }

            return result;
        } catch (NumberFormatException e) {
            return 0;
        }

    }

    public int reverse_1(int x) {
        if (x == 0) {
            return 0;
        }

        boolean isPositive;
        if (x > 0) {
            isPositive = true;
        } else {
            isPositive = false;
        }

        StringBuilder sb = new StringBuilder();

        while (x != 0) {
            int temp = x % 10;

            sb.append(Math.abs(temp));

            x /= 10;
        }

        try {
            int result = Integer.parseInt(sb.toString());

            if (!isPositive) {
                return result * -1;
            }

            return result;
        } catch (NumberFormatException e) {
            return 0;
        }

    }

    public static void main(String args[]) {

        LC_0007_ReverseInteger leet = new LC_0007_ReverseInteger();

        int reverse = leet.reverse_3(-321);

        System.out.println(reverse);
    }

}