7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

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

第一种算法

自己未看答案前自己写的。主要思路是:转成字符串逆序遍历,前面的0不拼接,如果有负号,最后再拼接到字符串前面,然后再将字符串转成整数。

def reverse1(x):
    if x == 0:
        return x
    s = str(x)
    n = len(s)
    rs = ""
    # 当出现第一位数字的时候,后面的0就需要添加上了
    add_zero = False
    for i in range(n):
        if s[n-1-i] != "0" and s[n-1-i] != "-":
            rs += s[n-1-i]
            add_zero = True
        if add_zero and s[n-1-i] == "0":
            rs += "0"

    if s[0] == "-":
        rs = "-" + rs

    if int(rs) < -(2 ** 31) or int(rs) > (2 ** 31 - 1):
        return 0
    else:
        return int(rs)

第二种算法

参考力扣精选答案和评论。我们只需要每次对 整数%10,就能得到末尾的数字,然后再将整数等于 整数/10 就能得到排除最后一位的新的整数。

def reverse2(x):
    n = 0
    ox = x
    x = abs(x)
    while x != 0:
        n = n * 10 + x % 10
        x = x // 10

    n = n if ox > 0 else -n
    if n < -(2 ** 31) or n > (2 ** 31 - 1):
        return 0
    else:
        return n

因为Python对于负数整除10的操作和别的语言不太一样,不方便计算,而且Python的底层是由C语言写的解释型语言,所以运行速度始终赶不上C语言它们。

最简单的C语言代码如下:

int reverse(int x)
{
    long n = 0;
    while (x)
    {
        n = n * 10 + x % 10;
        x /= 10;
    }
    return n > INT_MAX || n < INT_MIN ? 0 : n;
}
复杂度分析
  • 时间复杂度:O(log(x)),x 中大约有 log 10 (x) 位数字。
  • 空间复杂度:O(1)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题7:类型:数组、数学题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入...
    一个深入人心的名字阅读 284评论 0 0
  • 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 注意: 假设我们的环境只能存储得下...
    freesan44阅读 156评论 0 0
  • 一、题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 注意:假设我们的环境只能存储得...
    爱情小傻蛋阅读 78评论 0 0
  • 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1:输入: 123输出: 3...
    御坂10241阅读 119评论 0 0
  • 更多精彩内容,请关注【力扣简单题】。 题目 难度:★☆☆☆☆类型:数学 给出一个 32 位的有符号整数,你需要将这...
    玖月晴阅读 10,959评论 0 2