反转数字
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

输入:12
返回值:21

方法一 数学模拟

对数字每次进行%10运算重新翻转,之后再判断界限与符号即可, 翻转后的数可以用long来存储方便后面判断范围
图片说明

 int reverse(int x) {
        // write code here
       int a = x;
        if(a < 0) a *= -1;
        long ans = 0;
        while(a){    //遍历数字所有位
            ans *= 10;
            ans += a % 10;
            a /= 10;
        }
        if( ans < -(long)((long)1 << (long)31) || ans >= ((long)((long)1 << (long)31) )) return 0;    //判断范围
        if(x < 0) ans *= -1; //取负数符号
        return (int)ans;
    }

时间复杂度: O(n) 遍历一遍数字的长度
空间复杂度: O(1) 若干个变量

方法二 使用java字符串操作

将其转换成string进行翻转操作

    public int reverse (int x) {
        // write code here
        boolean fase = false;
        if(x < 0 ) {    //判断x是否位负数
            fase = true;x *= -1;
        }
        String a = new StringBuffer(String.valueOf(x)).reverse().toString();//转成字符串并翻转
        long s = Long.valueOf(a).longValue();
        if( ( -((long)1 << 31) - 1) <= s &&s <= ( ((long)1 << 31) - 1)){    //判断范围
            if(fase) return (int)s * -1;
            return (int)s;
        }
        return 0;
    }

时间复杂度: O(n) 使用reverse进行字符串翻转,reverse复杂度为O(n)
空间复杂度: O(n) 存储数字的字符串,长度为数字的长度