Reverse Integer

我的第一个想法:通过将Int转换为String,再转换为char数组之后完成数字的转向,最后char数组转为String,再转为int

代码如下:

i

import java.lang.*;
class Solution {
public int reverse(int x) {

String s=Integer.toString(x);
char[]t=s.toCharArray();
int n=t.length;
char[]a=new char[n];
if(t[0]=='-'){
a[0]='-';
for(int i=1;i<n;i++)
a[i]=t[n-i];
s=String.valueOf(a);
}
else{
for(int i=0;i<n;i++)
a[i]=t[n-i-1];
s=String.valueOf(a);
}
int y=Integer.parseInt(s);
if(y>Math.pow(2,31)-1||y<-Math.pow(2,31))
return 0;
else
return y;
}
}

其中,将int转为String用到了Integer.toString()方法;将String转为char[]用到了toCharArray()方法;

将char[]转换为String用到了String.valueOf(char[]名称)方法;将String转为Int用到了Integer.parseInt(String变量名)方法

运行结果:java.lang.NumberFormatException

原因分析:因为转换过来的数有可能超过了int范围,不能再用int型来接收了。因此,可以用long来接受。

在大括号内最后四行代码改为:

long y=Long.parseLong(s);
if(y>Math.pow(2,31)-1||y<-Math.pow(2,31))
return 0;
else
return (int)y;

结果:运行成功

其他方法学习:

在leetcode官网这道题的discuss中,看到了一个十分精巧的java代码,如下:

class Solution {
    public int reverse(int x) {
        int res = 0;
        while(x != 0){
            int each = x%10;
            x /=10;
            if((res > Integer.MAX_VALUE/10) || (res == Integer.MAX_VALUE/10 && each > 7))return 0;//判断是否溢出,int型最大值的个位为7
            if((res < Integer.MIN_VALUE/10) || (res == Integer.MIN_VALUE/10 && each < -8))return 0;//判断是否溢出,int型最小值个位为8
            res = res * 10 + each;//将每次取得的each往前挪一位
        }
        return res;
    }
}
posted @ 2019-05-14 20:44  xbc121  阅读(122)  评论(0)    收藏  举报