Python3实现整数反转:多种算法思路与边界处理
本文详细介绍Python3中整数反转的多种实现方式。涵盖将数字转为字符串翻转、纯数学取余取整、栈模拟及切片操作等方法。重点解析如何处理负号、前导零以及32位有符号整数溢出边界[-2^31, 2^31-1],并提供完整代码示例与测试用例,帮助开发者深入理解算法逻辑与性能差异。
题目要求接收一个32位有符号整数x,返回其数字部分反转后的结果。
若反转后的数值超出32位有符号整数的合法范围[−2^31, 2^31 − 1],则直接返回0。
需注意环境限制,假设无法存储64位整数(无论有符号或无符号)。
示例1如下:
输入:x = 123 输出:321
示例2如下:
输入:x = -123 输出:-321
示例3如下:
输入:x = 120 输出:21
示例4如下:
输入:x = 0 输出:0
思路1采用字符串转换法:先将整数转为字符串进行翻转,并单独判断正负号。最后检查反转后的整数是否超过32位有符号整数范围[−2^31, 2^31 − 1],若超出则返回0。
class Solution:
def reverse(self, x: int) -> int:
str1 = str(x)
if str1[0] == '-':
str1 = str1[0] + str1[:0:-1]
else:
str1 = str1[::-1]
return int(str1) if -2147483648<int(str1)<2147483648 else 0
思路2避免使用字符串转换:在翻转过程中实时判断数值是否超出限制,若超出则直接返回0。
class Solution:
def reverse(self, x: int) -> int:
y, res = abs(x), 0
# 则其数值范围为 [−2^31, 2^31 − 1]
boundry = (1<<31) -1 if x>0 else 1<<31
while y != 0:
res = res*10 +y%10
if res > boundry :
return 0
y //=10
return res if x >0 else -res
改进方案:
class Solution:
def reverse(self, x: int) -> int:
str1 = str(x)
if str1[0] == '-':
str1 = str1[0] + str1[:0:-1]
a=int(str1)
if (1<<31)<abs(a):
return 0
else:
str1 = str1[::-1]
a= int(str1)
if a>(1<<31) -1:
return 0
return a
补充:问:说说Python反转三位整数有几种方法?
答:这是leetcode上的一道编程算法题,感觉还是蛮经典的,今天就拿出来给大家分享一下!给出一个3位的正整数,你需要将这个整数中每位上的数字进行反转。例如:输入: 123,输出: 321 。大家先不看下面答案,看看如果是自己,可以想出几种Python方式来解决!
下面分别来说说几种实现的方式:
1、取余取整方式
class Test:
def reverseInteger(self, number):
g = number%10 #取出个位数
s = (int(number/10))%10 #取出十位数
b = int(number/100) #取出百位数
return g*100+s*10+b
if __name__ == "__main__":
ts = Test()
print (ts.reverseInteger(123)) #输出结果:321
2、使用栈的方式
class Test:
def reverseInteger(self, number):
number = str(number) # 模拟入栈
l = list(number)
result = ""
while len(l) > 0:
result += l.pop() # 模拟出栈
return int(result)
if __name__ == "__main__":
ts = Test()
print (ts.reverseInteger(123)) # 输出结果:321
3、使用切片的方式
class Test:
def reverseInteger(self, number):
number=str(number)
result=number[::-1] #python中切片的特殊用法
result=(int(result))
return result
if __name__ == "__main__":
ts = Test()
print (ts.reverseInteger(123))
4、整数转字符串,反转字符串,然后再转整数
class Test:
def reverseInteger(self, x):
plus_minus = ""
reverse_x = ""
if x < 0:
plus_minus = "-"
x = -x
for i in str(x):
reverse_x = i + reverse_x
reverse_x = plus_minus + reverse_x
if int(reverse_x) > pow(2, 31) - 1 or int(reverse_x) < pow(-2, 31):
return 0
return int(reverse_x)
if __name__ == "__main__":
ts = Test()
print (ts.reverseInteger(123)) #输出结果:321
到此这篇关于python3整数反转的实现方法的文章就介绍到这了,更多相关python3 整数反转内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









