본문 바로가기
알고리즘/LeetCode

[LeetCode]007. Reverse Integer JAVA

by Bhinney 2022. 12. 19.
 

Reverse Integer - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


📌 문제

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 [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

📌 방법 1. StringBuilder의 reverse 이용

  • 뒤집기의 문제를 보자마자 가장 먼저 StringBuilder의 reverse를 이용하는 방법이 생각났다.
  • x가 음수일 경우도 존재하기에 나누어서 풀어주었고, NumberFormatException이 발생해 try~ catch~으로 처리했다.
  • 시간은 4 ms가 소요되었고, 메모리는 42.2 MB가 사용되었다.
import java.lang.StringBuilder;

class Solution {
    public int reverse(int x) {
        try {
            String str;
            StringBuilder sb;
        
            if (x < 0) {
                x = Math.abs(x);
                str = Integer.toString(x);
                sb = new StringBuilder(str);
            
                return -Integer.parseInt(sb.reverse().toString());
            }
            str = Integer.toString(x);
            sb = new StringBuilder(str);
        
            return Integer.parseInt(sb.reverse().toString());
        } catch (NumberFormatException e) {
            return 0;
        }
    }
}

 


📌 방법 2. 반복문을 이용

  • 다른 방법인 반복문을 이용해서 직접 뒤집는 방법도 구현해보았다.
  • 일의 자리를 나머지로 구한 후, 자리 수를 올리며 더해주는 방법이다.
  • 시간은 1 ms가 소요되었고, 메모리는 39.4 MB가 사용되었다.
class Solution {
    public int reverse(int x) {
        
        /* 반환할 result 선언 */
        int result = 0;
        
        /* 반복문 */
        while(x != 0) {
           /* 
            * 결과 * 10 : 자리 수 올려주기
            * x % 10 : 10으로 나누어 일의 자리수 나머지 더하기
            */ 
            int check = result * 10 + x % 10;
            
            /*  검산 */ 
            if ((check - x % 10) / 10 != result) {
                return 0;
            }
            
           /* 
            * x를 10으로 나누어 자리 수 줄이기
            * 이미 x의 일의 자리 숫자는 나머지 값으로 구하여 더해 줌.
            */ 
            x /= 10;
            
            result = check;
        }
        
        return result;
    }
}

 

 

댓글