zoukankan      html  css  js  c++  java
  • 一道小题:整数反转

     这是一道再水不过的题。但是这道题其实会引起一些思考的

    这道题解法一定很多

    初见这道题时,大多数人想的思路应该就是直接暴力 数字转字符串。但是这样未免太低级了。

    在高级点就是,反转其实可以用栈。

    一步一步用vector 推进去 或者用栈推进去然后输出就行了

    中间要判断是否溢出,还有0和负号的一些处理

    但是还有一种解法。利用数学

    class Solution {
    public:
        int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                int pop = x % 10;
                x /= 10;
                if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
                if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
                rev = rev * 10 + pop;
            }
            return rev;
        }
    };

    用数学的除和取余实现出栈入栈。空间复杂度是常数级别

    对于溢出的判断。其实可以用try catch返回0

    但是这样好像不太好

    为什么有7和-8

    因为-2^31^=-2147483648,2^31^-1=2147483647

    怎么心算这个呢

    你知道2的四次方末位是6,那么就能知道2的32次方末位6,推出2的31次方末位是8

    其实就能心算出来了

  • 相关阅读:
    python安装
    实现node服务器
    VSCode集成tomcat及使用方法
    CommonJS规范
    Bootstrap 笔记
    vue笔记
    jgGrid模板添加
    vue组件中的data
    解析DNS
    StaticResource
  • 原文地址:https://www.cnblogs.com/ranzhong/p/14292624.html
Copyright © 2011-2022 走看看