一、介绍
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
来源:力扣(LeetCode) 链接:leetcode.cn/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
思路:
- 首先,提取公共的部分,有符号正数的范围[−231, 231 − 1], 如果超出了就返回0,定义返回的值0
- 这里要定义最大值231 - 1,最小值-231,如果超出这个返回就返回0
- 思路就是通过取余数,拿到最后一位,然后在把最后一位乘以10
- 这里先123,先取123的余数为3,这时拿到了倒叙的第一个值,但是还要对原值进行处理
- (123 - 3) // 10,这时得到的到值就是下次处理的参数12
- 同时这里也要计算返回值返回值等于返回值乘以10,再加上最后的除以余数的值
- result = result * 10 + last
- 这里是定义循环的判断条件就是不等于0
- 这里如果取的值为负值的话,就需要在单独处理一部分数据,比如-123
- 这里取余数,-123%10的余数是7,如果因为要处理参数的最后一位,
- 那么就要判断当前如果是负数,取到的余数要-10,那么就得到了处理后的数据-120,
- 之后就还按照之前的处理,先除以10,然后在重新定义返回值,最后通过循环,得到最后的值
三、代码执行
class Solution:
def resulterse(self, x: int) -> int:
"""
思路:
首先,提取公共的部分,有符号正数的范围[−231, 231 − 1], 如果超出了就返回0,定义返回的值0
这里要定义最大值2**31 - 1,最小值-2**31,如果超出这个返回就返回0
思路就是通过取余数,拿到最后一位,然后在把最后一位乘以10
这里先123,先取123的余数为3,这时拿到了倒叙的第一个值,但是还要对原值进行处理
(123 - 3) // 10,这时得到的到值就是下次处理的参数12
同时这里也要计算返回值返回值等于返回值乘以10,再加上最后的除以余数的值
result = result * 10 + last
这里是定义循环的判断条件就是不等于0
这里如果取的值为负值的话,就需要在单独处理一部分数据,比如-123
这里取余数,-123%10的余数是7,如果因为要处理参数的最后一位,
那么就要判断当前如果是负数,取到的余数要-10,那么就得到了处理后的数据-120,
之后就还按照之前的处理,先除以10,然后在重新定义返回值,最后通过循环,得到最后的值
:param x:
:return:
"""
INT_MIN, INT_MAX = -2**31, 2 ** 31 - 1
result = 0
while x != 0:
if result < INT_MIN // 10 + 1 or result > INT_MAX // 10:
return 0
last = x % 10
if x < 0 and last > 0:
last -= 10
x = (x - last) // 10
result = result * 10 + last
return result
if __name__ == '__main__':
x = -123
mm = Solution()
ss = mm.resulterse(x)
print(ss)