侧边栏壁纸
博主头像
老陆博主等级

AI落地、电商技术、Java实战——只写亲手跑通过的。15年技术负责人记录AI大模型、Codex/ChatGPT、电商系统、爬虫、若依二开的实操方案。

  • 累计撰写 191 篇文章
  • 累计创建 23 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

JAVA经典题库:7. 整数反转(难度:中等)

老陆
2022-11-04 / 0 评论 / 0 点赞 / 2,520 阅读 / 358 字

题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:


输入:x = 123
输出:321

示例 2:


输入:x = -123
输出:-321

示例 3:


输入:x = 120
输出:21

示例 4:


输入:x = 0
输出:0

提示:

-231 <= x <= 231 - 1

文字题解

方法一:数学
思路

记 rev 为翻转后的数字,为完成翻转,我们可以重复「弹出」x 的末尾数字,将其「推入」rev 的末尾,直至 x 为 0。

要在没有辅助栈或数组的帮助下「弹出」和「推入」数字,我们可以使用如下数学方法:

// 弹出 x 的末尾数字 digit
digit = x % 10
x /= 10

// 将数字 digit 推入 rev 末尾
rev = rev * 10 + digit

1-1667575008527
2
3
4
代码

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
                return 0;
            }
            int digit = x % 10;
            x /= 10;
            rev = rev * 10 + digit;
        }
        return rev;
    }
}

复杂度分析

  • 时间复杂度:O(log∣x∣)。翻转的次数即 x 十进制的位数。
  • 空间复杂度:O(1)。
0

评论区