我的思路是:
如果是正整数,利用%10和/10的方式,不断取出对应位置上的数字,并且赋值到字符串的尾部;最后,Integer.parseInt方法转化为正整数并返回。
如果是负整数,先取绝对值,然后按照%10和/10的方式,不断取出对应位置上的数字,同样添加到字符串上;最后转化为正整数,添加负号并返回。
但是没有考虑到溢出的情况,后来根据官方的思想,了解了溢出的现象,只能把错误处理了,报NumberFormatException异常,表示溢出;
class Solution {
public int reverse(int x) {
int c=0;
String b ="";
try{
if(x>0){
while(x>0) {
b=b+x%10;
x=x/10;
}
c = Integer.parseInt(b);
}else if(x<0){
x=Math.abs(x);
while(x>0) {
b=b+x%10;
x=x/10;
}
c = Integer.parseInt(b);
c=-c;
}else{
c=0;
}
}catch(NumberFormatException e){
}
return c;
}
}
时间复杂度为O(log10(x)),时间15ms,比较惨。
下附力扣给出的官方答案:
public static int reverse(int x) {
int rev = 0;//rev存储反转的数字
while(x!=0){
int pop = x%10;//pop表示弹出的数
//如果已经反转内容rev大于Integr最大值/10,那么一定溢出;
// 如果最rev反转内容等于最大值/10且最后一位pop的数字大于7,那么就从正数这边溢出了
//另外一种就是从负数那边溢出了
if((rev>Integer.MAX_VALUE/10||(rev==Integer.MAX_VALUE/10&&pop>7))
||rev<Integer.MIN_VALUE/10||(rev==Integer.MIN_VALUE/10&&pop<-8)){
return 0;
}
rev=rev*10+pop;//把pop防到rev后面
x/=10;//去掉已经pop的内容
}
return rev;
}
只有6ms,膜拜