Sunday, April 19, 2015
[Leetcode] Reverse Integer
Reverse Integer
Example1: x = 123, return 321
Example2: x = -123, return -321
Originally came up with below solution that is supposed to take care of overflow but instead causing overflow itself.
Solution 1:
int reverse(int x) {
if(x < 0)
return (-1) * reverse(0-x); -- failed because when x = -2147483648, -x overflows
int ret = 0;
while(x != 0)
{
if(ret > 214748364)
return 0;
ret = ret * 10 + x % 10;
x /= 10;
}
return ret;
}
A more generic solution is as below, instead of hard coding upper to pow(2,31)-1 (assuming size of int is always 32 bits), use sizeof() to calculate integer size.
Solution 2:
int reverse(int x) {
int size = sizeof(int) * 8;
int upper = (pow(2,size-1)-1)/10;
int ret = 0;
while(x != 0)
{
if(abs(ret) > upper)
return 0;
ret = ret * 10 + x % 10;
x /= 10;
}
return ret;
}
Labels:
leetcode
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment