码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】整数反转

时间:2020-03-19 23:14:11      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:输入   while   链表反转   链表   new   存在   需要   com   可以转化   

??前面我们依次整理了链表反转、字符串反转及其相应的衍生题目,而整数反转可以转化为字符串问题,也可以单独通过运算实现,主要是注意整数存在溢出的问题。

题目(Easy):7. 整数反转

题目描述:

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

示例 :

输入: 123           输出: 321
输入: -123          输出: -321
输入: 120           输出: 21

解题思路:

??类似于反转字符串,整数反转有两种方法:

??(1)将整数转为字符串,通过字符串的反转来实现整数的反转,整数转字符串String.valueOf(num),字符串转整数Integer.parseInt(str);

??(2)弹出和压入数字,通过pop = x % 10;取出末尾数字,压入到结果的前面。显然,方法二较好。
??
??这里需要注意的还有整数溢出的处理,同样有两种方法,一种可以通过java的异常机制,捕获对应的整数溢出异常,进行处理(NumberFormatException),还有一种是进行提前进行数字是否溢出的检查。int类型的范围是 -2^31——2^31-1,即-2147483648——2147483647.

代码实现:

//方法一,转为字符串实现
public int reverse(int x) {
    String s=String.valueOf(x);
    if(x<0)
        s=s.substring(1);
    StringBuffer strBuf = new StringBuffer(s);
    String str=strBuf.reverse().toString();
    try{
        return x>0 ? Integer.parseInt(str) : -1*Integer.parseInt(str);
    }catch(NumberFormatException e){
        return 0;
    }
}

//方法二,弹出和推入数字 & 溢出前进行检查
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;
}

【LeetCode】整数反转

标签:输入   while   链表反转   链表   new   存在   需要   com   可以转化   

原文地址:https://www.cnblogs.com/gzshan/p/12528022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!