- 题目:
反转整数
- 难度:
简单
- 描述:
给定一个 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值,如果存在负数情况,千万不能直接用“-”号取反得到正数结果,因为负数最小值取绝对值比正数的最大值还要大。