1. 题目

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

2. 思路

如果是负数,先转换为正数在处理,处理之后再补上符号位。
通过模10、余10可以从低到高的按序获得每一位数字,按照乘10累加即可。
注意1:有些数字反转之后会越界,需要特别处理。
注意2:负数反转时要特别注意-2^31直接反转时越界的,要特殊处理。

3. 代码

耗时:16ms

#include <limits>

class Solution {
public:
    int reverse(int x) {
        if (x == -2147483648) return 0;
        int ax = x;
        if (x < 0) ax = -x;
        //if (ax > numeric_limits<int>::max()) return 0;
        int y = r2(ax);
        if (x < 0) return -y;
        else return y;
    }
    
    int r2(int x) {
        long long y = r3(x);
        if (y > numeric_limits<int>::max()) return 0;
        else return y;
    }
    
    long long r3(long long x) {
        long long y = 0;
        while (true) {
            if (x < 10) return y * 10 + x;
            y = 10 * y + x % 10;
            x /= 10;
        }
        return y;
    }
};

knzeus
72 声望28 粉丝

行万里路,读万卷书