Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
解题思路:注意溢出的判断
思路一:按位计算.(初始思路)
//22ms
class Solution {
public:
int res;
void fun(int x)
{
int tmp = x, bits = 0;
while(tmp)
{
tmp /= 10; bits++;//位数
}
for(int i=1;i<=bits;i++)
{
res += (x%10) * pow(10.0,(bits-i));
x /= 10;
}
}
int reverse(int x)
{
res = 0;
if(x == -2147483648)
return 0;
if(x >= 0)
{
fun(x);
if(res <= 0)
{
return 0;
}
return res;
}
else
{
x *= (-1);
fun(x);
if(res <= 0)
{
return 0;
}
return res*(-1);
}
}
};
思路二:翻转计算的数学优化
//35ms
class Solution {
public:
int reverse(int x)
{
int res = 0;
while(x)
{
int temp = res*10 + x%10;
if(temp/10 != res)//overflow
return 0;
res = temp;
x /= 10;
}
return res;
}
};
思路三:用long long类型记录结果,优化溢出的判断
//15ms
class Solution {
public:
int reverse(int x)
{
long long res = 0;
while(x)
{
res = res*10 + x%10;
x /= 10;
}
if(res>INT_MAX || res<INT_MIN)
return 0;
return res;
}
};