알고리즘 공부/LeetCode
[LeetCode] 7. Reverse Integer 파이썬 코드
준개발자
2021. 5. 29. 15:08
문제
7. Reverse Integer [Easy]
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 |
코드
이 문제는 요즘의 손코딩 문제(?)스러운 것 같다.. 문제 자체는 난이도가 높지 않지만, 스스로 예외 케이스를 생각해서 빠짐없이 꼼꼼히 짜는 것이 포인트이다.
주요 포인트
1) 부호
2) 0이 숫자 끝에 붙은 경우 (여러 개인 경우도 처리!)
3) 범위 체크! (파이썬에서 제곱은 2**n으로 표시. 2^n이 아니라!)
class Solution:
def reverse(self, x: int) -> int:
x = str(x)
# reverse string
x = x[::-1]
# if reversed integer starts with consecutive 0
# and is not 0, cut off front part
if x[0] == '0' and x != '0':
for i in range(len(x)):
if x[i] != '0':
x = x[i:]
break
# move sign bit to first digit if exists
if not x[-1].isdigit():
if x[-1] == '-':
x = int(x[0:-1])*(-1)
else:
x = int(x[0:-1])
else:
x = int(x)
# range check
left_range = -1*2**31
right_range = 2**31-1
if x < left_range or x>right_range:
return 0
return x
결과
