zoukankan      html  css  js  c++  java
  • 【LeetCode】整数反转

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

    题目(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;
    }
    
  • 相关阅读:
    玩转渗透神器Kali:Kali Linux作为主系统使用的正确姿势TIPS
    知道创宇研发技能表v2.2
    我对什么都感兴趣,可我迷茫了(转载)
    防御性编程
    防御性编程技巧
    移动安全技术如何未雨绸缪?
    1054. 求平均值 (20)
    1053. 住房空置率 (20)
    1052. 卖个萌 (20)
    1051. 复数乘法 (15)
  • 原文地址:https://www.cnblogs.com/gzshan/p/12528022.html
Copyright © 2011-2022 走看看