zoukankan      html  css  js  c++  java
  • 面试题:整数反转

    题目

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

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    解决方案

    方法一 

    思路:数字反转可以先将数字转换为字符串,然后倒着循环字符串拿到反转后的值。但是需要注意几个问题。首先,数值是负数的情况,需要处理“-”,另外就是可能反转后会出现溢出的现象。因此转成字符串后,先将字符串转为long,判断是否超过Integer.MAX_VALUE,溢出输出0,或者报异常。

    代码:

    public static int reverse(int x) {
            String s = String.valueOf(x);
            if(s.length() <= 1) {
                return x;
            }
    
            StringBuilder builder = new StringBuilder();
            int j = 0;
            char firstChar = s.charAt(0);
            if(firstChar == '-') {
                builder.append('-');
                j = 1;
            }
    
    
            for(int i = s.length() - 1; i >= j; i--) {
                builder.append(s.charAt(i));
            }
    
            long result = Long.valueOf(builder.toString());
    
            //如果翻转后的数字超过int类型范围,则返回0
            if(result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
                return 0;
            }
            return (int) result;
        }

    方法二 

    思路:一个整数的个位数是多少,其实就是x%10,然后要获取十位数上面的值,则x=x/10,再去取x%10,拿到十位数的值。如果x是一个三位数,则反转后的状态是个位数*(位数-1)。设当前计算结果为ans,下一位为pop

    代码:

    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            if ((ans * 10) / 10 != ans) {
                ans = 0;
                break;
            }
            ans = ans * 10 + x % 10;
            x = x / 10;
        }
        return ans;
    }
  • 相关阅读:
    Python——文件操作2
    Python——文件操作1
    Python——集合
    Springboot @Transactional捕获异常事务回滚
    elasticsearch5.2 高亮java代码
    Java static作用
    elasticsearch6.3 自动补齐suggest java代码
    spring boot通过官网创建新项目
    eclipse web工程不能 修改build path
    linux虚拟机添加网卡
  • 原文地址:https://www.cnblogs.com/alimayun/p/12791871.html
Copyright © 2011-2022 走看看