您的位置:首页 > 其它

leetcode第七题(easy)——Reverse Integer

2015-05-16 21:10 267 查看
题目描述如下:

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

我为这道题尝试了3种解法,一开始的解法运行时间为499ms,觉得太慢了,于是在网上参考了别人的思路,的确是快了一些,但是后来觉得在刷题的时候没这必要,运行出来就行了。三种解法的思路及代码如下:

1.首先判断是正数还是负数,设置一个res变量,负数为true,正数为false。然后再将整数转成字符串,由于StringBuffer和StringBuilder有反转的方法,于是构造一个stringbuffer对象,将其反转后再变为字符串,最后再将字符串转成Int类型,此处要捕获异常,当溢出时返回0。
public int reverse1(int x){//499ms
boolean res=false;
String s;
if(x>0){
s=""+x;
}else{
x=-x;
s=""+x;
res=true;
}
StringBuffer sb = new StringBuffer(s);
s = sb.reverse().toString();
try{
x = Integer.parseInt(s);
}catch(NumberFormatException e){
System.out.println(e);
return 0;
}
if(res){
return -x;
}else{
return x;
}
}
2.这个是参考别人的,但是不是很了解这个是怎么判断溢出的
public int reverse2(int x){//306ms
        int result = 0;  
        int mod = 0;  
        while(x != 0) {  
            mod = x % 10;  
            if (result > 0) {  
                if (result > Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE / 10 && mod > Integer.MAX_VALUE % 10))
                {  
                    return 0;  
                }  
            } else {  
                if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && mod < Integer.MIN_VALUE % 10))
                {  
                    return 0;  
                }  
            }  
            result = result * 10 + mod;  
            x /= 10;  
        }  
        return result;  
    }
3.这个思路更好理解,和第二种思路差不多,只不过判断溢出的方式不一样,设置一个long类型的testresult,通过result和testresult的比较,不相等就表示溢出了,则返回0;否则返回result
public int reverse3(int x) {  //305ms
int result = 0;
int mod = 0;
long testresult=0;
while(x != 0) {
mod = x % 10;
result = result * 10 + mod;
testresult = testresult * 10 + mod;
x /= 10;
}
if(testresult!=result){
return 0;
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: