题目:整数反转
- 题号:7
- 难度:中等
- https://leetcode-cn.com/problems/reverse-integer/
给你一个 32 位的有符号整数 x ,返回将 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
示例 5:
输入: x = 2147483647(2^31 − 1 = int.MaxValue)
输出: 0
示例 6:
输入: x = -2147483648(−2^31 = int.MinValue)
输出: 0
提示:
$-2^{31} <= x <= 2^{31} - 1$
实现
思路:把负数转换为正数,通过“队列”统一处理。
public class Solution {
public int Reverse(int x) {
if (x == int.MinValue) // 需要特殊处理的数
return 0;
long result = 0;
int negative = x < 0 ? -1 : 1;
x = negative * x;
Queue<int> q = new Queue<int>();
while (x != 0)
{
q.Enqueue(x % 10);
x = x/10;
}
while (q.Count != 0)
{
result += q.Dequeue()*(long) Math.Pow(10, q.Count);
if (negative == 1 && result > int.MaxValue)
{
result = 0;
break;
}
if (negative == -1 && result*-1 < int.MinValue)
{
result = 0;
break;
}
}
return (int)result*negative;
}
}
Python 语言
思路: 转化成字符串,通过切片方式处理。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
str_num = str(x)
if str_num[0] == '-':
return -int(str_num[1:][::-1]) if -int(str_num[1:][::-1]) > -2**31 else 0
else:
return int(str_num[::-1]) if int(str_num[::-1]) < 2**31-1 else 0