整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。示例 :
输入:x = 123 输出:321
输入:x = -123 输出:-321
此题主要难点在前后反转之后会造成类型溢出。
第一种解法:将输入的整形先转化为字符串String,在从后向前进行遍历。
class Solution {
public int reverse(int x) {
String s=String.valueOf(x);
if(x>0){
String ss="";
for(int i=s.length()-1;i>=0;i--){
ss+=s.charAt(i);
}
//转换成long
Long ll=Long.parseLong(ss);
//进行溢出判断
if(ll>Integer.MAX_VALUE){
return 0;
}
return Integer.valueOf(ss);
}else if(x<0){
String ss="-";
for(int i=s.length()-1;i>0;i--){
ss+=s.charAt(i);
}
Long ll=Long.parseLong(ss);
if(ll<Integer.MIN_VALUE ){
return 0;
}
return Integer.valueOf(ss);
}else{
return 0;
}
}
}
第二种解法:因为是整形,所以可以直接对其进行求余分离各个位数,然后重新进行组合。
class Solution {
public int reverse(int x) {
int xx=0;
while(x!=0){
if(xx>Integer.MAX_VALUE/10||xx<Integer.MIN_VALUE/10){
return 0;
}
int k=x%10;
x/=10;
xx=xx*10+k;
}
return xx;
}
}
第二种解法的算法复杂度更小,代码也更简洁一些。