7. 整数反转(简单)
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
思路:
- 将x转化为string型,然后将正负号外的其他字符反向排列,在转化为int型,然后判断阈值区间,最后输出。
- 若为负数就调用reverse(-x)即可,利用%10和/10将x的各位从高到低依次提取出来,并加入另一个数中,判断阈值区间,然后输出。
难点:翻转后数值溢出问题
(1)C++__思路1
class Solution {
public:
int reverse(int x) {
string s = to_string(x);
if (s[0]=='-')
std::reverse(s.begin()+1,s.end());
else
std::reverse(s.begin(),s.end());
long long int res = stoll(s);
if (res > 2147483647 || res < -2147483648)
res = 0;
return int(res);
}
};
(2)C++ 思路二:
class Solution {
public:
int reverse(int x) {
long long int res = 0;
if(x<0){
if(x == -2147483648) //当x=-2147483648时,-x超出int范围
return 0;
else
return int(-reverse(-x));
}
while(x){
res = res*10 + x%10;
x = x/10;
}
if (res <=0x7fffffff )
return int(res);
else
return 0;
}
};
(3)python-2
class Solution:
def reverse(self, x: int) -> int:
s = str(x)
if x>=0:
s=s[::-1]
else:
s=s[0]+s[1:][::-1]
if abs(int(s)) > 0x7fffffff:
return 0
return int(s)
(4)python_2
class Solution:
def reverse(self, x: int) -> int:
if x<0:
return -self.reverse(-x)
res = 0
while(x):
res=res*10 + x%10
x=x//10
if res <= (2**31-1):
return res
else:
return 0