当前位置:网站首页>LeetCode #7.整数反转
LeetCode #7.整数反转
2022-07-29 05:24:00 【张楚明ZCM】
题目截图

方法一:数学法
思路:
利用“%”取模,利用“/”除数。
注意:python默认是浮点算法,所以要加上int()强制转换为整数型。
同时题目要求输入输出的范围都必须是
,此处做两次判断。
同时要判断是否为负数。
输入的x为0时和正数情况一致,不做区分。
我分成两个方法。输入是负数时,先将负数转为正数,然后直接引用正数的方法反转,最后再将其变为负数。
class Solution:
def reverse(self, x: int) -> int:
if -2 ** 31 <= x <= 2 ** 31 - 1:
if x < 0:
x = -x
y = (-1) * self.reverse_Positive_number(x)
else:
y = self.reverse_Positive_number(x)
else:
y = 0
if -2 ** 31 <= y <= 2 ** 31 - 1:
pass
else:
y = 0
return y
def reverse_Positive_number(self, x: int) -> int:
y = 0
while x > 0:
temp = x % 10
x = int(x / 10)
y = y * 10 + temp
return y代码的优化:
是int型的取值范围,python中没有INT_MIN和INT_MAX,需要手动定义。直接在代码中写-2 ** 31等数值意义不明,应改为:
INT_MIN, INT_MAX = -2**31, 2**31 - 1python中两个斜杠“//”可以表示整除,不一定要使用int()来转换。
python3中取余向下取整数。
python3取模方法如下:
正数直接整除后取除法的余数
-x%y=z
找-x%y = -x- (比-x小的那个可以被y整除的负整数) =-x -(-n*y) ==n*y-x=z的模。
上段代码其实只需要判断返回的y是否在区间就可以了,当然,判断两次也无可厚非。
因为python3给负数取10的模也会返回
的结果,可以借此将模减去10,得到一个负数
如
,将
,再利用
,也就是
# Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果,因此这里需要进行特殊判断
if x < 0 and digit > 0:
digit -= 10
最后优化的代码如下:
class Solution:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2**31, 2**31 - 1
rev = 0
while x != 0:
# INT_MIN 也是一个负数,不能写成 rev < INT_MIN // 10
if rev < INT_MIN // 10 + 1 or rev > INT_MAX // 10:
return 0
digit = x % 10
if x < 0 and digit > 0:
digit -= 10
x = (x - digit) // 10
rev = rev * 10 + digit
return rev
或者
class Solution:
def reverse(self, x: int) -> int:
INT_MIN, INT_MAX = -2 ** 31, 2 ** 31 - 1
flag = 1 if x > 0 else -1
x_positive = abs(x)
y = 0
if INT_MIN <= x <= INT_MAX:
while x_positive > 0:
temp = x_positive % 10
x_positive = int(x_positive / 10)
y = y * 10 + temp
ret = flag * y
else:
ret = 0
if INT_MIN <= ret <= INT_MAX:
pass
else:
ret = 0
return ret方法二:利用字符串取反
设置一个标记flag,若x>0则为1,否则为-1
flag = 1 if x > 0 else -1让后将int型的x转变为str型,同时反转输出后再强制转变为int型
int(str())
利用abs()去x的绝对值
最后的结果乘以标记flag
ret = flag * int(str(abs(x))[::-1])最终结果
class Solution:
def reverse(self, x: int) -> int:
flag = 1 if x > 0 else -1
ret = flag * int(str(abs(x))[::-1])
if abs(ret) > 2 ** 31:
ret = 0
ret边栏推荐
猜你喜欢

Hal library learning notes-13 application of I2C and SPI

简洁代码实现pdf转word文档

CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器

【软件工程之美 - 专栏笔记】24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?

Ml6 self study notes

兼容cc1101/cmt2300-DP4301 SUB-1G 无线收发芯片

LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601

JUC并发知识点

EPS32+Platform+Arduino 跑马灯

2022 spring recruit - Hesai technology FPGA technology post (one or two sides, collected from: Digital IC workers and FPGA Explorers)
随机推荐
倾角传感器精度校准检测
八大排序-----------快速排序
【软件工程之美 - 专栏笔记】24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
SimpleFOC调参2-速度、位置控制
leetcode刷题笔记 452. Minimum Number of Arrows to Burst Balloons (Medium) 452.用最少数量的箭引爆气球(中等)
关于时间复杂度的个人看法
【软件工程之美 - 专栏笔记】30 | 用好源代码管理工具,让你的协作更高效
JUC concurrent knowledge points
传统模型预测控制轨迹跟踪——波浪形轨迹(功能包已经更新)
利用云打码来破解登录遇到验证码的问题
【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
Huawei cloud 14 day Hongmeng device development -day1 source code acquisition
clickhouse 导入CSV失败 不报错但是无数据
Joiner.on和stream().map联合使用技巧
Multithreading and concurrency
NFC双向通讯13.56MHZ非接触式阅读器芯片--Si512替代PN512
Ml8 self study notes
基于51单片机的四路抢答器仿真
2022 spring move - core technology FPGA post technical aspects (one side experience)
SimpleFOC+PlatformIO踩坑之路