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

Example 1:
Input: x = 123
Output: 321

Example 2:
Input: x = -123
Output: -321

Example 3:
Input: x = 120
Output: 21

Example 4:
Input: x = 0
Output: 0
'''

class Solution(object):
    def reverse(self, x):
        """
        Time:  O(log(x))
        Space: O(1)
        """
        is_negative = x < 0
        x = abs(x)
        reverse = 0
        while x:
            reverse *= 10
            reverse += x % 10
            x //= 10

        INT_MAX_32 = 2**31 - 1
        if reverse > INT_MAX_32:
            return 0
        elif is_negative:
            return -reverse
        else:
            return reverse
        
