leetcode每日一题——反转整数

  • 题目:

反转整数

  • 难度:

简单

  • 描述:

给定一个 32 位有符号整数,将整数中的数字进行反转。

  • 解法:
class Solution {
    public int reverse(int x) {
        //int型整数最大位数
        final int MAX_LENGTH = 10;
        //最大值和最小值
        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        String inputNumber = String.valueOf(x);
        //是否位负数
        boolean isNegative = false;
        if (inputNumber.charAt(0) == '-') {
            isNegative = true;
        }
        StringBuilder sb = new StringBuilder(inputNumber);
        //正数
        if (!isNegative) {
            //按字符串反转
            String rev = sb.reverse().toString();
            //大于Int最大值,溢出
            if (rev.length() >= MAX_LENGTH && rev.compareTo(String.valueOf(maxValue)) > 0) {
                return 0;
            } else {
                return Integer.valueOf(rev);
            }
            //负数
        } else {
            String rev = new StringBuilder(sb.substring(1)).reverse().toString();
            //比较时需要先把minValue转成字符串,不能直接加"-"号转成正数,因为会溢出,结果还是负数
            if (rev.length() >= MAX_LENGTH && rev.compareTo(String.valueOf(minValue).substring(1)) > 0) {
                return 0;
            } else {
                return -Integer.valueOf(rev);
            }
        }
    }
}
  • 总结:

计算时,整形int值,如果存在负数情况,千万不能直接用“-”号取反得到正数结果,因为负数最小值取绝对值比正数的最大值还要大。

猜你喜欢

转载自www.cnblogs.com/willdoop/p/9638275.html