48 lines
1 KiB
Python
48 lines
1 KiB
Python
import math
|
|
|
|
|
|
# Top Solution
|
|
class Solution:
|
|
def reverse(self, x: int) -> int:
|
|
MAX_INT = 2**31 - 1 # 2,147,483,647
|
|
MIN_INT = -(2**31) # -2,147,483,648
|
|
reverse = 0
|
|
|
|
while x != 0:
|
|
if reverse > MAX_INT / 10 or reverse < MIN_INT / 10:
|
|
return 0
|
|
digit = x % 10 if x > 0 else x % -10
|
|
reverse = reverse * 10 + digit
|
|
x = math.trunc(x / 10)
|
|
|
|
return reverse
|
|
|
|
|
|
# Some other Solution
|
|
class SolutionTwo:
|
|
def reverse(self, x: int) -> int:
|
|
flag = -1 if x < 0 else 1
|
|
|
|
s = str(abs(x))
|
|
x = int(s[::-1])
|
|
|
|
return x * flag if x < 2**31 else 0
|
|
|
|
|
|
class SolutionThree:
|
|
def reverse(self, x: int) -> int:
|
|
max_int = pow(2, 31) - 1
|
|
min_int = pow(-2, 31)
|
|
|
|
flag = -1 if x < 0 else 1
|
|
ans = 0
|
|
x = abs(x)
|
|
|
|
while x > 0:
|
|
digit = x % 10
|
|
if ans > max_int / 10:
|
|
return 0
|
|
ans = (ans * 10) + digit
|
|
x //= 10
|
|
|
|
return ans * flag
|