leetcode 7.整数反转

看到这题最直接的思路,是想着先转化为字符串再反转,然后转化为整数输出。转化为输出的时候需要考虑溢出的情况。而且如何对负数的字符串进行处理每个人也有各自的方法。

以下记录一个看到的题解比较清晰的实现

class Solution
{
public:
    int reverse(int x)
    {
        long result; //利用long避免溢出
        if (x == INT_MIN)
        {
            return 0;
        }
        if (x < 0)
        {
            return -reverse(-x);
        }
        stringstream ss;
        ss << x;
        string tmpStr;
        ss >> tmpStr;

        int tmpStrSize = int(tmpStr.size());
        string resultStr;
        for (int index = tmpStrSize - 1; index >= 0; index--)
        {
            resultStr.push_back(tmpStr[index]);
        }
        ss.clear(); //使用前记得clear
        ss << resultStr;
        ss >> result;
        if (result > INT_MAX)
        {
            return 0;
        }
        return int(result);
    }
};

作者:pinku-2
链接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-cshi-xian-liang-chong-jie-fa-z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

另一种实现思路,不需要经过转化。每次提取末尾数字放到开头,同时检查是否溢出。

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

 

posted @ 2020-08-23 09:37  布羽  阅读(140)  评论(0)    收藏  举报