当前位置:网站首页>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边栏推荐
- 2022 spring move - core technology FPGA post technical aspects (one side experience)
- leetcode刷题笔记 452. Minimum Number of Arrows to Burst Balloons (Medium) 452.用最少数量的箭引爆气球(中等)
- 关于时间复杂度的个人看法
- 【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识
- 2022 spring move - core technology FPGA development post pen test question (original question and experience)
- 爬虫Requests库的一些简单用法
- 基于F407ZGT6的WS2812B彩灯驱动
- NFC双向通讯13.56MHZ非接触式阅读器芯片--Si512替代PN512
- 【软件工程之美 - 专栏笔记】20 | 如何应对让人头疼的需求变更问题?
- LeetCode #557.反转字符串中的单词 III
猜你喜欢

基于F407ZGT6的WS2812B彩灯驱动

【软件工程之美 - 专栏笔记】14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决

LeetCode #344.反转字符串

SimpleFOC调参3-PID参数整定攻略

DP1332E多协议高度集成非接触式读写芯片

Hal library learning notes-10 overview of Hal library peripheral driver framework

简洁代码实现pdf转word文档

Huawei cloud 14 day Hongmeng device development -day5 drive subsystem development

LeetCode #3.无重复字符的最长子串

Hal library learning notes-11 I2C
随机推荐
八大排序----------------冒泡排序
Based on stc51: schematic diagram and source code of four axis flight control open source project (entry-level DIY)
Huawei cloud 14 days Hongmeng device development -day1 environment construction
LeetCode #189.轮转数组
Huawei cloud 14 day Hongmeng device development -day1 source code acquisition
Huawei cloud 14 day Hongmeng device development -day7wifi function development
数学建模心得
STM32 MDK(Keil5) Contents mismatch错误总结
【软件工程之美 - 专栏笔记】28 | 软件工程师的核心竞争力是什么?(下)
Hal library learning notes - 9 DMA
【软件工程之美 - 专栏笔记】“一问一答”第3期 | 18个软件开发常见问题解决策略
滑动窗口 Leetcode 76.最小覆盖子串(困难) 76.76. MinimumWindow Substring (Hard)
NOI Online 2022普及组 题解&个人领悟
NRF52832-QFAA 蓝牙无线芯片
LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601
STM32 串口乱码
LeetCode #344.反转字符串
【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media
低功耗蓝牙5.0芯片nrf52832-QFAA