题目描述:
给定一个 32 位有符号整数,将整数中的数字进行反转。
解题思路:
输入:32位有符号整数
输出:反转后的有符号整数(反转后数值溢出,返回0)
输入等于0直接返回0;
将数字转成字符串后拆解成char[];
创建一个StringBuilder后循环字符数组,不断将当前字符插入StringBuilder的首位;
反转后的字符串转换成double类型。
转换后的数字与2的31次方做对比,超过直接返回0,不超过转换成int类型。
输入的有符号整数大于0,直接返回;
输入的有符号整数小于0,返回0减去转换后的数字。
class Solution {
double iX = new Double(Math.pow(2d,31d));
double iMax = iX - 1d;
double iMin = 0d - iX;
public int reverse(int x) {
if(x == 0){
return 0;
}
char[] reverseArray = String.valueOf(x).toCharArray();
StringBuilder temp = new StringBuilder();
int iLength = reverseArray.length;
if(x < 0){
if(iLength == 2){
return x;
}
for(int i = 1; i < iLength; i++){
temp.insert(0, reverseArray[i]);
}
}
if(x > 0){
if(iLength == 1){
return x;
}
for(int j = 0; j < iLength; j++){
temp.insert(0, reverseArray[j]);
}
}
double temps = Double.parseDouble(temp.toString());
if(temps > iMax || temps < iMin){
return 0;
}
int returnValue = Integer.parseInt(temp.toString());
if(x < 0){
return 0 - returnValue;
}
return returnValue;
}
}