示例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