[LeetCode]反转整数(Reverse Integer)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/X_1076/article/details/82379648

题目描述

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

解决方法

123 -> 321的过程

  1. res = 0
  2. 获取个位g
  3. res = res * 10 + g
  4. 原值 /= 10
  5. 重复2 3步骤直到原值为0

反转的算法有了,还差个溢出判断。
a为原值,d为新值,c为个位,如果不溢出的话可以通过a*10+c=d,a=(d-c)/10互相转换
根据上述可得以下代码

    public int reverse(int x) {
        int res = 0;

        while (x != 0) {
            int remainder = x % 10;
            int newRes = res * 10 + remainder;
            if ((newRes - remainder) / 10 != res) // 如果有溢出则无法回退到原来的结果
                return 0;
            res = newRes;
            x /= 10;
        }

        return res;
    }

时间复杂度:O(log(x)),x为要反转的数字
空间复杂度:O(1)

原文链接:https://lierabbit.cn/2018/05/09/反转整数

猜你喜欢

转载自blog.csdn.net/X_1076/article/details/82379648
今日推荐