7.整数反转

简介: 7.整数反转

反转一个32位有符号整数。如果反转后的结果超过整型范围,返回0。不允许使用64位整数。

 

最容易理解的方法是:整数转字符串,反转后再转回整数。其中需要处理一些细节,1是对负数的处理,2是越界的处理。

public int reverse(int x) {
        String xString = Integer.toString(x);
        String string = xString;
        int flag = 1; //正负号
        //负号处理
        if (x<0){
            flag = -1;
            string = xString.substring(1); //去掉负号
        }
        //越界处理
        try{
            return Integer.valueOf(new StringBuilder(string).reverse().toString())*flag;
        }catch (Exception e){
            return 0;
        }
    }

官方提供的最快的方法:


重复“弹出” x 的最后一位数字,并将它“推入”到 rev 的后面。需要注意的细节是整数溢出(rev*10+pop)。


需要在此操作前检查是否溢出。先考虑正数时,如果溢出,则rev*10 +pop > Integer.MAX_VALUE


解得:rev>Integer.MAX_VALUE/10

或 rev == Integer.MAX_VALUE/10 && pop> Integer.MAX_VALUE% 10    

    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 > Integer.MAX_VALUE%10)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < Integer.MIN_VALUE%10)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }

//Integer.MAX_VALUE%10 的值 是7,Integer.MIN_VALUE%10 的值是-8,官方题解中直接用了7和-8.

 

相关文章
|
7月前
|
存储 Python
leetcode-7:整数反转
leetcode-7:整数反转
38 1
|
存储 算法
LeetCode7-整数反转
LeetCode7-整数反转
|
2月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
44 1
|
1月前
|
存储 Java
整数反转
题目要求将32位有符号整数的每一位数字反转,并考虑溢出情况。提供了两种Java实现:一种通过字符串操作实现,另一种使用数学运算,后者更为高效且简洁。两种方法均在检测到溢出时返回0。
30 0
|
2月前
|
Python
07_整数反转2021-04-18
07_整数反转2021-04-18
13 0
|
4月前
|
算法
LeetCode第7题整数反转
该文章介绍了 LeetCode 第 7 题整数反转的解法,通过除 10 取模和乘 10 累加的方式实现整数反转,同时注意边界情况的判断,并总结了通过举例推算发现规律的解题思路。
LeetCode第7题整数反转
|
7月前
|
存储 C++
整数反转(C++)
整数反转(C++)
44 0
|
存储 算法 安全
LeetCode - #7 反转整数
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
存储
整数反转1
整数反转1
72 0
|
存储 Java Python
leetcode:7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
44 0