zoukankan      html  css  js  c++  java
  • Java算法练习——整数反转

    题目链接

    题目描述

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

    备注

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

    示例 1

    输入: 123
    输出: 321
    

    示例 2

    输入: -123
    输出: -321
    

    示例 3

    输入: 120
    输出: 21
    

    题解

    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;
    }
    

    复杂度分析

    • 时间复杂度:$O(log(x))$,x 中大约有 $log_{10}(x)$ 位数字。
    • 空间复杂度:$O(1)$。

    手记

    32位有符号整数的范围为$[-2147483648 , 2147483647]$ 。 Java中有最大最小值的静态常量,我们直接调用就好,不过这道题要想完美解答,需要知道范围两端的个位数。

    这题很简单,但是我开始没有做的很完美,继续加油吧。

  • 相关阅读:
    P2949 [USACO09OPEN]工作调度Work Scheduling
    P1279 字串距离 (动态规划)
    P2634 [国家集训队]聪聪可可
    点分治模板
    网站收集
    P1131 [ZJOI2007]时态同步
    P1446 [HNOI2008]Cards
    P1437 [HNOI2004]敲砖块
    蓝桥杯-k倍区间
    atom / vscode (配置c++环境流程)
  • 原文地址:https://www.cnblogs.com/mxwbq/p/10945453.html
Copyright © 2011-2022 走看看