↑ 点击上方“静悦悠然”关注我们
整数反转
题目(LeetCode)给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1: 输入: 123 输出: 321示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21
注意
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2**31, 2**31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法一思路
将整数类型转换为字符串类型,判断其第一位是否是负号,如果是则单独提取出来,然后进行反向切片即完成了翻转,再转化为整数类型,最后判断其结果是否在 [−2**31, 2**31 − 1] 内,如果在返回 0。
特点
消耗时间相对较长,内存消耗较小
代码
class Solution(object): def reverse(self, x: int) -> int: x = str(x) a = '' if x[0] == '-': a += '-' x = x[1:] a += x[::-1] x = int(a) if x < -2 ** 31 or x > 2 ** 31 - 1: return 0 return xtarget = -123solution = Solution()print(solution.reverse(target))
解法二
思路
将解法一中的反向切片换成 join() 方法和 reversed() 方法进行翻转,其余不变。
特点
消耗时间相对较少,消耗内存相对较多
代码
class Solution: def reverse(self, x: int) -> int: x = str(x) b = x[0] a = '' if b == '-': a += '-' x = x[1:] a += ''.join(reversed(x)) x = int(a) if x < -2 ** 31 or x > 2 ** 31 - 1: return 0 return xtarget = 123solution = Solution()print(solution.reverse(target))
知识点
reversed 函数返回一个反转的迭代器。
Python join() 方法用于将序列(迭代器)中的元素以指定的字符连接生成一个新的字符串。
思路
使用Python的算术运算符求解,循环将 x 的最后一个数字取出,然后放在 z 的后面,每次循环时检查 z 是否溢出。
每次循环时,将 z 乘上 10 即个位数为 0 ,加上 y 除以 10 的余数(即 y 的最后一位数),举例:
51 * 10 + 752 % 10 = 510 + 2 = 512
再将 y 整除 10 向下取整,得到拿掉最后一位数之后的值,举例:
752 // 10 = 75
特点
消耗时间相对较少,消耗内存相对较少
代码
class Solution(object): def reverse(self, x: int) -> int: y, z = abs(x), 0 a = (1 << 31) - 1 if x > 0 else 1 << 31 while y != 0: z = z * 10 + y % 10 if z > a: return 0 y //= 10 return z if x > 0 else -ztarget = -3216456solution = Solution()print(solution.reverse(target))
知识点
abs() 方法获取数字的绝对值。
1 << 31 等于 2 ** 31
y //= 10 等于 y = y // 10
python位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下例中变量 a 为 60,b 为 13,相应的二进制格式如下:
a = 0011 1100
b = 0000 1101
a&b
a|b
a^b
~a
a << 2
a >> 2
python赋值运算符
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a (向下取整,例:9 // 2 = 4)
![944320f9748a8c21db2ca365017279c3.png](https://i-blog.csdnimg.cn/blog_migrate/76fab1e69814d67dba5f5bd6424c44de.png)
文章不错,点个在看吧!
![8ae11c4e899aaab70a39f5b6bab4df8e.gif](https://i-blog.csdnimg.cn/blog_migrate/659fe474034ea5d1f9232e9be680993c.gif)