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;
    }
    
  • 相关阅读:
    login
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
    JavaScript第一讲之js操作css
    JavaScript第一讲之认识js案例
    Java的数据库连接工具类的编写
    JavaEE框架整合之基于注解的SSH整合
    windows端口号速查表
    工厂模式
    流策略概述Traffic Policy
  • 原文地址:https://www.cnblogs.com/gzshan/p/12528022.html
Copyright © 2011-2022 走看看