leetcode每日一题——反转整数

时间:2023-03-09 03:30:15
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值,如果存在负数情况,千万不能直接用“-”号取反得到正数结果,因为负数最小值取绝对值比正数的最大值还要大。