LeetCode | 7.Reverse integer(整数翻转)

来源:互联网 发布:董成鹏抄袭知乎 编辑:程序博客网 时间:2024/05/21 13:22

Reverse digits of an integer.

Example1: x = 123, return 321Example2: 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.

解题思路:注意溢出的判断
思路一:按位计算.(初始思路)

//22msclass 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);        }    }};

思路二:翻转计算的数学优化

//35msclass 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类型记录结果,优化溢出的判断

//15msclass 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;    }};
1 0