一道小题:整数反转

 这是一道再水不过的题。但是这道题其实会引起一些思考的

这道题解法一定很多

初见这道题时,大多数人想的思路应该就是直接暴力 数字转字符串。但是这样未免太低级了。

在高级点就是,反转其实可以用栈。

一步一步用vector 推进去 或者用栈推进去然后输出就行了

中间要判断是否溢出,还有0和负号的一些处理

但是还有一种解法。利用数学

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

用数学的除和取余实现出栈入栈。空间复杂度是常数级别

对于溢出的判断。其实可以用try catch返回0

但是这样好像不太好

为什么有7和-8

因为-2^31^=-2147483648,2^31^-1=2147483647

怎么心算这个呢

你知道2的四次方末位是6,那么就能知道2的32次方末位6,推出2的31次方末位是8

其实就能心算出来了

原文地址:https://www.cnblogs.com/ranzhong/p/14292624.html