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;
     
    }

No comments:

Post a Comment