LeetCode题解:Reverse Integer (3种解法)

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321


题解:
输入一个整数,然后倒过来输出它。

解决思路:
其实这道题看起来非常简单,要实现也是几行代码的事。但是有个小问题容易被忽略(刷过一些找工作神书的话估计都能考虑到),就是边界问题。什么意思呢?如果我们输入的整数超出了int的表达范围,这个问题要怎么解决呢?这道题我想到了两个思路:
1、用比int更大的数据类型存储我们转换后的结果,然后与int的边界比较,超出了边界则返回0。
2、用字符串存储我们输入的数,然后输出出来就行。
3、这个思路是LeetCode上的人分享的,他是认为int型有32位,最高位为符号位,把我们输入的数右移31位,然后转换我们输入的数,也右移31位。如果两者相同,则说明没有溢出。

代码:
1、
public class Solution {
    public int reverse(int x) {
    	long reverse = 0;
        
        while(x != 0){
        	reverse = reverse * 10 + x % 10;
        	if(reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE)
        		return 0;
        	x = x / 10;
        }
        return (int)reverse;
    }
}
2、by: xhdengfei  
static int reverse(int x){
    String strX = Integer.toString(x);
    int len = strX.length();
    StringBuffer dest = new StringBuffer(len);
    if(x>=0){
        for(int i = len -1; i >= 0 ; i--){
            dest.append(strX.charAt(i));
        }
    }
    else{
        dest.append('-');
        for(int i = len -1; i >= 1 ; i--){
            dest.append(strX.charAt(i));
        }
    }return Integer.parseInt(dest.toString());
}
3、by: chrisnanxin
public class Solution {
public int reverse(int x) {
    int result = 0;
    int sign = x>>31;
    while (x != 0) {
        result = result * 10 + x % 10;
        x = x / 10;
    }
    if(sign!=(result>>31)){
        System.out.println("overflow..");
        System.exit(1);
    }
    return result;
}




你可能感兴趣的:(LeetCode题解:Reverse Integer (3种解法))