7. 整数反转
raykindle 人气:2题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
★ 注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法:
- 转字符串法:
1 class Solution: 2 def intReverse(self, x): 3 str_x = str(x) 4 if str_x[0] != '-': 5 x = int(str_x[::-1]) 6 else: 7 x = -int(str_x[:0:-1]) # [i:j:-1], j是取不到的,当i和j不给出时,i代表-1,j代表-len(a)-1, 8 # 所以str_x[:0:-1]也可以写成str_x[:len(str_x):-1] 9 10 # 数值范围[-2^31, 2^31-1]————>用二进制表示:[-(1<<31), (1<<31)-1] 11 return x if -(1<<31) < x < (1<<31)-1 else 0
- 数学法:
1 class Solution: 2 def intReverse(self, x): 3 y, rev = abs(x), 0 4 # 数值范围[-2^31, 2^31-1]————>用二进制表示:[-(1<<31), (1<<31)-1] 5 boundary = (1<<31)-1 if x>0 else 1<<31 6 while y != 0: 7 rev = rev*10 + y%10 8 if rev > boundary: 9 return 0 10 else: 11 y //= 10 12 return rev if x > 0 else -rev
- 延伸知识点:
加载全部内容