用了两种解法
第一种朴素思路,将数字转化成大字符串,然后进行字符串颠倒,最后转回数字。如果转换出错,代表溢出(之前别的题解里看到的奇怪套路...)
第二种稍微高效写的写法,利用取余公式获取最后一位数字,然后添加到另一个数字的个位上

Code-1

class Solution {
    public int reverse(int x) {
	// 数字转化为字符串 
        String ss = Integer.toString(x);
        boolean postitive = true;
	// 判断是整数还是负数
        if (ss.startsWith("-")) {
            postitive = false;
        }
        char[] chs; 
        chs = postitive ? ss.toCharArray() : ss.substring(1).toCharArray();
        int len = chs.length;
        // 双指针对调字符
        for(int start = 0, end = len -1 ; start < end; start++, end--) {
            char tmp = chs[end];
            chs[end] = chs[start];
            chs[start] = tmp;
        }
        Integer ans ;
        // 比较离谱的做法,利用异常捕获来判断是否会转换溢出🤣
        try {
            ans = postitive ? Integer.parseInt(new String(chs)) : Integer.parseInt("-" + new String(chs));
        } catch(Exception e) {
	    // 转换溢出时
            return 0;
        }
        return ans;
    }

Code-2

// 常见的颠倒数字
class Solution {
    public int reverse(int x) {
        if (x == 0) return 0; 
        int b = 0;
        boolean positive = true;
        if (x < 0) {
            positive = false;
            x = x * -1;
        } 

        int carry;
        while(x > 0) {
            // 个位数
            carry = x % 10;
            // 这里是方法2的精华,
            // 如果b已经大于Integer正数值/10,则下一步 b * 10必定溢出,更何况还加上了一个数。可以用数学证明
            if (b > Integer.MAX_VALUE / 10) return 0;
            b = b * 10 + carry;
            x /= 10;
        }

        return b = positive ? b : -b;
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹