美文网首页
Reverse Integer

Reverse Integer

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-08-06 21:27 被阅读15次

题目来源
将一个整型数字反转,假如反转后溢出则返回0。
我想着搞个long long类型,然后一位一位的算,然后再判断,写的十分弱鸡,十分不雅,令人看着十分难受,代码如下:

class Solution {
public:
    int reverse(int x) {
        long long res = 0;
        if (x == INT_MIN)
            return 0;
        int label = 1;
        if (x < 0) {
            x = -x;
            label = -1;
        }
        while (x) {
            res = res * 10 + x % 10;
            x = x / 10;
        }
        if (label == 1 && res > INT_MAX)
            return 0;
        if (label == -1 && res > static_cast<long long>(INT_MAX) + 1)
            return 0;
        return label * static_cast<int>(res);
    }
};

肯定有更加优雅的写法,以及O(1)的做法。
然后我发现自己想多了,没有O(1)的,不过更优雅的必须有。
代码如下:

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x) {
            int tail = x % 10;
            int newRes = res * 10 + tail;
            if ((newRes - tail)  / 10 != res)
                return 0;
            res = newRes;
            x /= 10;
        }
        return res;
    }
};

直接通过除10后是不是等于原来的数来判断是否溢出了,很漂亮很简洁。

相关文章

网友评论

      本文标题:Reverse Integer

      本文链接:https://www.haomeiwen.com/subject/espnlxtx.html