728x90
String → list → reverse 이용해서 풀기
첫번째 풀이, 28ms
python
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31
def reverse(self, x:int) -> int:
reverse_list = list(str(x))
reverse_list.reverse()
if x < 0:
reverse_list = [reverse_list.pop()] + reverse_list
reverse_str = ''.join(reverse_list)
if int(reverse_str) < self.min or int(reverse_str) > self.max:
return 0
else:
return int(reverse_str)
나눈 몫/나머지 이용해서 풀기
# 1234
# 1234 % 10 -> 4 (10으로 나눈 나머지)
# 1234 / 10 -> 123 (10으로 나눈 몫)
# 123 % 10 -> 3 (10으로 나눈 몫을 10으로 나눈 나머지)
# 123 / 10 -> 12 (10으로 나눈 몫을 10으로 나눈 몫)
# 12 % 10 -> 2 (몫의 몫을 10으로 나눈 나머지)
# 12 / 10 -> 1 (몫의 몫을 10으로 나눈 목)
# 1 % 10 -> 1 (몫의 몫의 몫을 10으로 나눈 나머지)
# 1 / 10 -> 0 (자릿수가 없음)
- 순식가엔 코드를 작성했는데, 계속 에러가 났다. 이유를 도무지 못 찾겠어서 디버그를 했다. 이유는 / 문제. /는 float 타입을 반환한다. 내가 원하는 몫을 구하는 operator는 ‘/’가 아니라 ‘//’이다.!!
1번 풀이 (32mb/sec)
python
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31 - 1
def reverse(self, x: int) -> int:
answer = 0
minus = x < 0
quote = abs(x)
reverse = []
while quote:
remain = quote % 10
quote = quote // 10
reverse.append(remain)
n = len(reverse)
for i,num in enumerate(reverse):
pow_idx = n - i - 1
if minus and answer + num * 10 ** pow_idx > abs(self.min):
return 0
elif not minus and answer + num * 10 **pow_idx > self.max:
return 0
answer += num * 10 ** pow_idx
return answer if not minus else -answer
2번 풀이 (36mb/sec)
python
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31 - 1
def reverse(self, x: int) -> int:
answer = 0
minus = x < 0
quote = abs(x)
n,i = 0,1
while quote:
quote //= 10
n+=1
quote = abs(x)
while quote:
remain = quote % 10
quote = quote // 10
if minus:
if answer + remain * 10 ** (n-i) > abs(self.min):
return 0
else:
if answer + remain * 10 ** (n-i) > self.max:
return 0
answer += remain *10**(n-i)
i+=1
return answer if not minus else -answer
4번 풀이 (32mb/sec) (1번+3번 짬뽕)
python
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31 - 1
def reverse(self, x: int) -> int:
if x == 0:
return 0 # exception becaure if x==0 -> reverse = "", int("") error.
answer = 0
minus = x < 0
quote = abs(x)
reverse = ""
while quote:
remain = quote % 10
quote = quote // 10
reverse += str(remain)
reverse = "-" + reverse if minus else reverse
if int(reverse) < self.min or int(reverse) > self.max:
return 0
return int(reverse)
솔루션 풀이 (36mb/sec)
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31 - 1
def reverse(self, x: int) -> int:
answer = 0
minus = x < 0
quote = abs(x)
reverse = 0
while quote:
remain = quote % 10
quote = quote // 10
if not minus and reverse > self.max//10 or ( reverse==self.max//10 and remain > 7):
return 0
elif minus and reverse > abs(self.min)//10 or ( reverse==abs(self.min)//10 and remain > 8):
return 0
reverse = reverse * 10 + remain
return reverse if not minus else -reverse
- reverse = reverse * 10 + remain (매 루프마다 이런식으로 반복하면 된다. 이게 생각이 안났다)
- reverse를 매 루프마다 업데이트 해줄때, 업데이트 최댓값, 최소값을 직전에 10으로 나눠준 수와 비교한다.
파이썬 버전 솔루션은 없어서 새롭게 구성 (24mb/sec)
class Solution:
def __init__(self):
self.min = -2**31
self.max = 2**31 - 1
def reverse(self, x: int) -> int:
answer = 0
minus = x < 0
quote = abs(x)
reverse = 0
while quote:
remain = quote % 10
quote = quote // 10
if minus and reverse*10 +remain > abs(self.min):
return 0
if not minus and reverse*10 +remain >self.max:
return 0
reverse = reverse * 10 + remain
return reverse if not minus else -reverse
Runtime: 24 ms, faster than 93.99% of Python3 online submissions for Reverse Integer.
Memory Usage: 12.9 MB, less than 100.00% of Python3 online submissions for Reverse Integer.
Runtime: 24 ms, faster than 93.99% of Python3 online submissions for Reverse Integer.
Memory Usage: 12.9 MB, less than 100.00% of Python3 online submissions for Reverse Integer.
python에선 음수를 나누면 몫과 나머지가 양수가 나온다. 이때문에 C++과 좀 다른듯
'hacking or software engineering skills > leetcode' 카테고리의 다른 글
[Leetcode] Longest Substring Without Repeating Characters (python) (0) | 2020.02.09 |
---|---|
7. Reverse Integer (0) | 2019.05.13 |
6. ZigZag Conversion (0) | 2019.05.09 |
5. Longest Palindromic Substring (0) | 2019.05.09 |
4. Median of Two Sorted Arrays (0) | 2019.05.09 |