LeetCode题解——7.整数反转

2020-10-30 14:21发布

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

思路

思路一

    这题其实经常写Java程序的人一看,就能得到一个思路:将int值转化为String类型,然后倒叙一下转化为long类型,再判断是否超过了int类型的范围,于是就得到如下的代码实现:

public int reverse(int x) {
        String temp=x+"";
        if(x < 0) {
            temp = temp.substring(1, temp.length());
        }
        String result="";
        for (int i=temp.length()-1; i>=0; i--){
            result+=temp.charAt(i);
        }
        long ll=Long.parseLong(result);
        if(ll > Integer.MAX_VALUE || 0-ll <Integer.MIN_VALUE){
            return 0;
        }
        if(x < 0){
            return (int) (0-ll);
        }
        return (int)ll;
    }123456789101112131415161718

思路二

    思路一算法索然简单,但是涉及到了太多的转化,效率不高,所以提出另外一种方案,即重组数字,该思路是从个位开始重建数字:

  1. 数字s%10的到个位数g,s=s/10消除个位数

  2. 新数字n初始为0,n=n*10+g,判断n是否超出int型范围

    代码如下:

public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }

作者:suye233

链接:https://blog.csdn.net/hackersuye/article/details/100804472

来源:CSDN

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。