2018暑假第二題
給定一個 32 位有符號整數,將整數中的數字進行反轉。(python)
示例 1:
輸入: 123 輸出: 321
示例 2:
輸入: -123 輸出: -321
示例 3:
輸入: 120 輸出: 21
注意:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。
題目連結:https://leetcode-cn.com/problems/reverse-integer/description/
答案:
自己寫的很low的程式碼:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
z = 0
if x>0:
while x != 0:
y = x%10
x = x/10
z = z*10+y
if z > pow(2,31)-1:
return 0
elif x<0:
x = abs(x)
while x != 0:
y = x%10
x = x/10
z = z*10+y
z = -z
if z < -pow(2,31):
return 0
else:
return 0
return z
網上搜的,實現比較容易的程式碼,直接將數字放在list裡面,然後將list倒過來,再判斷第一位是否為0。但是感覺這個程式碼如果是1200的話,輸出就是錯的:
def reverse(x): if x>0: a=list(reversed(list(str(x)))) if a[0]=='0': b=int(''.join(a[1:])) if b<pow(-2,31) or b>pow(2,31)-1: return 0 else: return b else: b=int(''.join(a)) if b<pow(-2,31) or b>pow(2,31)-1: return 0 else: return b elif x<0: a = list(reversed(list(str(x)[1:]))) if a[0]=='0': b=int(''.join(['-']+a[1:])) if b<pow(-2,31) or b>pow(2,31)-1: return 0 else: return b else: b=int(''.join(['-']+a)) if b < pow(-2, 31) or b > pow(2, 31) - 1: return 0 else: return b else: return 0
所以我改成這樣了:
def reverse(x):
if x>0:
a=list(reversed(list(str(x))))
if a[0]=='0':
b=int(''.join(a[1:]))
if b<pow(-2,31) or b>pow(2,31)-1:
return 0
else:
return b
else:
b=int(''.join(a))
if b<pow(-2,31) or b>pow(2,31)-1:
return 0
else:
return b
elif x<0:
a = list(reversed(list(str(x)[1:])))
while a[0] = 0:
a = a[1:]
b=int(''.join(['-']+a))
if b < pow(-2, 31) or b > pow(2, 31) - 1:
return 0
else:
return b
else:
return 0