[Leetcode] 7.Reverse integer


Problem

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).

Solution

1. arithmetic

pop/push 연산을 통하여 마지막 one digit부터 reverse 숫자를 구함. overflow check! 필수

2. string

string으로 표현하여 reverse string을 구함

  • sign 체크
  • reverse string 구함
  • overflow 검사

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import functools
from typing import List
 
 
class Solution:
    def reverse(self, x: int-> int:
        '''
         Runtime : 36ms
         Memory Usage : 14.3MB
         sol :  %연산으로 일의자리수 부터 구하여 reverse 숫자를 구함
        :param x:
        :return:
        '''
        # set variable
        sign = 1
        ans = 0
        
        #  check whether positive and negative
        if x < 0:
            sign = -1
            x = -x
        
        # algorithm for reverse integer
        while x > 0:
            ans = ans * 10 + x % 10
            x = int(x / 10)
        # overflow check
        if ans > 2 ** 31 - 1:
            return 0
        else:
            return sign * ans
    
    def reverse2(self, x: int-> int:
        '''
          string으로  reverse str구하고 sign를 구함
        :param x: x 
        :return: 
        '''
        sign = 1
        if x < 0:
            sign = -1
            x = -x
        # reverse str
        ans = str(x)[::-1]
        ans = int(ans)
        # overflow check
        if ans < -(2 ** 31or ans > 2 ** 31 - 1:
            return 0
        else:
            return -ans if sign == -1 else ans
 
cs