示例git
Input: 123 Output: 321 Input: -123 Output: -321 Input: 120 Output: 21
解決:app
將int轉爲str,若是小於0,從字符串索引1開始存入列表中,大於0,從索引0開始存入列表,若是能被10整除,從列表倒數第二個元素開始,每一個元素轉爲int,再與對應的10的冪相乘,累加。這段代碼比較low,代碼量較大,沒有用到Python語言的特色。this
class Solution: def reverse(self, x: int) -> int: str_x = str(x) list_x = [] if x < 0: for i in range(1, len(str_x)): list_x.append(str_x[i]) else: for i in range(len(str_x)): list_x.append(str_x[i]) number = 0 if x%10 == 0: for j in range(len(list_x)-2, -1, -1): number += int(list_x[j]) * (10 ** j) else: for j in range(len(list_x)-1, -1, -1): number += int(list_x[j]) * (10 ** j) # print(number) if x < 0: number = number - 2*number if number >= 2 ** 31 or number < (-2 ** 31): number = 0 return number
與上面的思路一致,不過利用了Python的一些操做spa
class Solution: def reverse(self, x): """ :type x: int :rtype: int """ if x==0: return 0 str_x = str(x) x = '' if str_x[0] == '-': x += '-' x += str_x[len(str_x)-1::-1].lstrip("0").rstrip("-") # Python3 整型是沒有限制大小的,能夠看成 Long 類型使用,因此能夠直接強制轉化,其餘語言兩個數相加會溢出,變成負數 x = int(x) if -2**31 < x < 2**31-1: return x return 0
官方解法。循環,對給定的int數先對10取餘,再除以10,直到除以10爲0爲止。反轉後的數開始爲0,每次乘10再加上每次取餘後的結果,最終就是反轉的結果。可是乘10加上取餘結果可能會形成溢出問題。進行判斷:code
class Solution: def reverse(self, x: int) -> int: rev = 0 flag = 1 if x < 0: x = abs(x) flag = -1 while x != 0: pop = x % 10 x = x // 10 if (rev > (2**31-1) // 10) or (rev == (2**31-1) // 10 and pop > 7): return 0 if (rev < (-2**31) // 10) or (rev == (-2**31) // 10 and pop < -8): return 0 rev = rev * 10 + pop return rev * flag
注:Python中負數取餘索引
-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7