zoukankan      html  css  js  c++  java
  • 7

    思路

    这道题说起来贼简单, 思路倒没什么思路, 就是把数字一个一个剥离下来然后逆序还原就行了.

    实现

    看上去简单我却提交了三次才AC. 这里面其实关于int越界的情况的坑很多, 就比如输入的结果是一个10位的int, 倒过来就会越界, 此时要特别小心, 按题目的意思应该返回0.

    提交

    前两次都爆炸, 第一次由于我用了绝对值函数, 碰到输入是最大负整数的情况就炸了, 第二次是我实现中说的, 碰到一个刚开始可以, 倒过来越界的, 又炸了...

    代码

    public class Solution {
        public int reverse(int x) {
            if(x == -2147483648)    return 0;
    
            boolean isNegative = x < 0;
            x = Math.abs(x);
    
            long[] queue = new long[32];
            int start = 0, end = 0;
            while (x != 0){
                queue[end++] = x % 10;
                x /= 10;
            }
    
            long re = 0;
            while (start < end){
                re = re * 10 + queue[start++];
            }
    
            if(isNegative){
                re = re > 2147483648l ? 0 : -re;
            }else{
                re = re > 2147483647l ? 0 : re;
            }
            return (int)re;
        }
    }
    

    最佳实现

    这里其实完全可以省略这个简易的queue, 另外正负号其实不用分开进行讨论, 完全可以合在一起讨论, 另外检查越界的情况可以用运算还原检查值是否相等来判断. 网上看到最优雅的实现是这个 :

    public int reverse(int x)
    {
        int result = 0;
    
        while (x != 0)
        {
            int tail = x % 10;
            int newResult = result * 10 + tail;
            if ((newResult - tail) / 10 != result)
                return 0;
            result = newResult;
            x = x / 10;
        }
    
        return result;
    }
    

    这种解法稍微在越界问题上会产生误导, 建议看一下第8题.

  • 相关阅读:
    实现 ajax 多项选择框
    Ajax 文件上传之PHP心得
    php tree生成树分享
    基于JQuery框架的AJAX
    jQuery Ajax 全解析
    asp 下载函数
    10元奥运纪念钞明发行 与人民币等值流通
    jQuery(Ajax)/PHP/MySQL实现搜索自动提示功能
    隔行扫描和逐行扫描(interlace and progressive )
    VGA 输出调试
  • 原文地址:https://www.cnblogs.com/nzhl/p/6220713.html
Copyright © 2011-2022 走看看