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中有最大最小值的静态常量,我们直接调用就好,不过这道题要想完美解答,需要知道范围两端的个位数。

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

  • 相关阅读:
    Java基础——数组复习
    JavaScript 笔记总结
    HTML总结
    css代码添加背景图片常用代码
    Java 并发包之线程池综述
    Java 并发之Concurrent 包综述
    AQS 框架之 Lock 接口
    AQS 框架之 LockSupport 线程阻塞工具类
    JAVA 锁之 Synchronied
    ThreadLocal 线程本地变量
  • 原文地址:https://www.cnblogs.com/mxwbq/p/10945453.html
Copyright © 2011-2022 走看看