不断的取10的余数 放在一个数组里面
这里面有几个边界条件

  1. -0的情况

  2. 在代码里,负数如果和正数统一处理的话 注意取反 因为正负最大值差了1

  3. 反转后判断是否超过取值范围,主要就是提前一位与214748364进行比较

public class Solution {
    public int reverse(int x) {
        if (x == 0)
            return x;
        
        if (x == -2147483648) {
            return 0;
        }
        
        int[] digits = new int[10];
        
        boolean isPositive = true;
        if (x < 0) {
            isPositive = false;
            x = -x;
        }
        
        int i = 0;
        while (x >= 10) {
            digits[i] = x % 10;
            i++;
            x = x / 10;
        }
        
        digits[i] = x;
        i++;
        int length = i;
        
        int y = 0;
        
        for (int j = 0; j < length; j++) {
            y = y * 10 + digits[j];
            if (y > 214748364 && j < (length - 1)) {
                return 0;
            } else if (y == 214748364 && j < (length - 1)) {
                if (isPositive) {
                    if (digits[9] > 7) {
                        return 0;
                    } 
                } else {
                    if (digits[9] == 9) {
                        return 0;
                    } else if (digits[9] == 8) {
                        return -2147483648;
                    }
                }
            }
        }
        
        if (isPositive) {
            return y;
        } else {
            return -y;
        }
    }
}

chenatu
106 声望12 粉丝