力扣刷题日记-7. 整数反转

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

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:
    1. 负数的阈比正数大1
    1. 限制条件要卡死,不然就出错
class Solution {
    public int reverse(int x) {
        boolean neg = ((x >>> 31) & 1) == 1;
        x = neg ? x : -x;// 转换为负数进行计算,是因为负数的空间比正数大1个空间
        int m = Integer.MIN_VALUE / 10;
        int o = Integer.MIN_VALUE % 10;
        System.out.println(m);
        System.out.println(o);
        int res = 0;
        while(x != 0) {
            // 这个条件是用来防止溢出的,如果res比系统最小还小,乘以10就有可能溢出,
            // x % 10比系统最小值模10都小,那么也有可能溢出
            if(res < m || (res == m && x % 10 < o)) {
                return 0;
            }
            res = res * 10 + x % 10;
            x /= 10;
        }
        return neg ? res : Math.abs(res);
    }
}