首页 > 其他 > 详细

Reverse Integer

时间:2019-05-14 21:29:14      阅读:143      评论:0      收藏:0      [点我收藏+]

我的第一个想法:通过将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;
    }
}

Reverse Integer

原文:https://www.cnblogs.com/xbc121/p/10864485.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!