Questions:
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
Code:
class Solution: def reverse(self, x): """ :type x: int :rtype: int """ if x < 0: a = list(str(abs(x)))[::-1] b = "".join(a) if (0-int(b) < -2147483648): return 0 else: return (0-int(b)) else: # a = list(str(x))[::-1] a = list(str(x)) a.reverse() # reverse() 和[::-1]作用相同 print(a) b = "".join(a) if (int(b) > 2147483648): return 0 else: return int(b) def reverse2(self,x): rev = 0 flag = 0 if x < 0: x=abs(x) flag = 1 while x != 0: pop = x % 10 # 取出最后位的一个数 x = int(x/10) # 取出最后位一个数后剩下的数 if rev > 2147483648 /10 or (rev == 2147483648/10 and pop >7 ): return 0 # if rev < 2147483648 / 10 or (rev == 2147483648 / 10 and pop < -8): # return 0 rev = rev * 10 + pop # 把数反转过来,高位变低位,低位变高位 if flag == 1: return 0-rev return rev s = Solution() print("The first method:") print(s.reverse(123)) print(s.reverse(120)) print(s.reverse(-321)) print(s.reverse(1534236469)) print("The second method:") print(s.reverse2(123)) print(s.reverse2(120)) print(s.reverse2(-321)) print(s.reverse2(1534236469))
Result:
The first method:
['3', '2', '1']
321
['0', '2', '1']
21
-123
['9', '6', '4', '6', '3', '2', '4', '3', '5', '1']
0
The second method:
321
21
-123
0
第一个方法比较好理解,关键是取绝对值abs(),int转str,再转list,list取反。然后换成str再换成int。
第二个方法是利用 %10取最低位,类似于pop出最低位,剩下的数就是 x=int(x/10), 然后push进去,方法就是 rev = rev * 10 + pop,低位变高位高位变低位。
第二个方法的复杂度是:
- Time Complexity: O(log(x)). There are roughly log10(x) digits in xx.
- Space Complexity: O(1).