我的第一个想法:通过将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;
}
}
原文:https://www.cnblogs.com/xbc121/p/10864485.html