7. 整数反转 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-integer/
题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
首先要注意以下两点:
1. 题目中输入的参数是“整数型”,且给出了反转后整数的范围限制
2. 反转的数字可能有哪几种特殊情况?
(这里提出问题2,是因为自己做题的时候只按照题目所给的一部分特殊情况而考虑问题,而没有自己思考其他可能出现的特殊情况,在提交后往往会报错,报错后只能不断查缺补漏,根据未通过项目补写代码。如果只出现一次错误还好,可能是自己没有考虑全面。但多次查缺补漏后还会出现“意料之外”的内容,就是问题了。因此要养成在做题之前考虑清楚每一步骤、特殊情况之后再开始动笔的好习惯。例如这道题,我在做的时候就因为读题不准确,以为只需要限制输入整数的大小即可)
1)整数型有可能是负数;
2)数字最末尾可能是0;
3)反转后的整数可能会超出范围;
解题步骤:
1. 输入的是整数型,但我需要遍历该数字,如何解决?
将整数型转为字符串。我用的是python,在转换成字符串之后又新建了一个空列表来放置字符串。尝试过直接在字符串内进行调换,报错(可能是由于个人技术有限导致的,也可能是python不支持这一做法)
class Solution:
def reverse(self, x: int) -> int:
strx = str(x)
list1 = []
for i in strx:
list1.append(i)
2. 设置左右指针,并判断第一个字符是否为负号:
left = 0
right = len(list1) - 1
if list1[left] == "-":
left += 1
3. 遍历开始:
while left < right:
list1[left], list1[right] = list1[right], list1[left]
left += 1
right -= 1
4. 将列表转换为字符串:
s = ""
for i in list1:
s += i
5. 将字符串转换为整数型,并判断转换后整数的大小:(不需要关注0)
intx = int(s)
if intx > 2**31 - 1 or intx < -2**31 or intx == 0:
return 0
else:
return intx