题目描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例:

输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路分析:

这道题是easy,实际上思路是比较简单的,首先用一个数组逆向的存储整数各位,再遍历一次数组,重新构建一遍即可。但是由于这个整数溢出问题,我也磕磕绊绊提交了多次,主要还是自己基础不够扎实。这里需要注意的是如何对于整数溢出进行判断,参考了一个博客的相关内容:https://blog.csdn.net/xiaomingZeng/article/details/80526607

另外也有一些题解采用了更加简洁的方法,没有用我这种这么直接的方式去判断溢出,算是比较巧妙的。可以参考博客:https://www.cnblogs.com/wmx24/p/9149916.html

代码:

 class Solution {
public:
int reverse(int x) {
if(x>INT_MAX || x<INT_MIN )
return ;
vector<int> num;
while(x!=)
{
int tmp = x%;
num.push_back(tmp);
x = x/;
}
int res = ;
int base = ;
for(int i=num.size()-; i>=; i--)
{ if(num[i] > INT_MAX/base || num[i] < INT_MIN/base)
return ;
if(num[i]<)
{
if(base*num[i] < INT_MIN - res)
return ;
}
else if(num[i]>)
{
if(base*num[i] > INT_MAX - res)
return ;
}
res += num[i]*base;
if(i>)
{
if(base >= INT_MAX/)
return ;
else
base *= ;
}
}
return res;
}
};
05-27 16:48