整数反转
一:题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例1:
输入:x = 123
输出:321
示例2:
输入:x = -123
输出:-321
示例3:
输入:x = 120
输出:21
示例4:
输入:x = 0
输出:0
二:思路及代码
(一):思路
1、将int类型整数转变成字符串,然后对字符串进行反转
2、将反转之后的字符串使用大数BigInteger进行表示,然后判断与-2147483648和2147483647的大小。
关于大数的相关知识点可见:Java随笔-大数
(二):代码
public static int reverse(int x) {
String string = "";
String reve="";
string+=x;
if (x<0){
string = string.substring(1);
reve = reve(string);
reve = "-"+reve;
}else if (x>0){
reve = reve(string);
}else {
return 0;
}
//对字符串进行整理
BigInteger bigInteger = new BigInteger(reve);
int i = bigInteger.compareTo(BigInteger.valueOf(-2147483648));
int j = bigInteger.compareTo(BigInteger.valueOf(2147483647));
if (i>-1&&j<1){
return bigInteger.intValue();
}else
return 0;
}
//字符串反转
public static String reve(String string){
if (string.length()>1){
String str = "";
char[] chars = string.toCharArray();
char c;
for (int i = 0; i < chars.length/2; i++) {
c = chars[i];
chars[i] = chars[chars.length-1-i];
chars[chars.length-1-i] = c;
}
for (int i = 0; i < chars.length; i++) {
str+=chars[i];
}
return str;
}else {
return string;
}
}
注:以上解法对于新手来说可能是更加容易想到的,关于其他的一些解法,请见力扣官网:整数反转