LeetCode第5题:整数反转

整数反转

题目描述
标签

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


LeetCode第5题:整数反转_第1张图片
LeetCode第5题:整数反转_第2张图片

思路1:时间复杂度: O(lgx) 空间复杂度: O(1)

LeetCode第5题:整数反转_第3张图片

Python实现

# -*- coding: utf-8 -*-
# @Time    : 2020/1/7 14:28
# @Author  : Eric Lee
# @Email   : [email protected]
# @File    : 整数反转.py
# @Software: PyCharm
class Solution():
    def reverse(self, x: int) -> int:
        if x < 0:  # 判断是否为负数
            # 如果是负数则取绝对值调用自身,最后将结果转为负数
            return -self.reverse(-x)
        res = 0
        while x:
            # 得到最后一位数字
            last = x%10
            # 原来的最后一位前移一位
            front = res * 10
            res = front + last
            x = x//10

        return res if res < (2 ** 31-1)and -2**31else  0

Java实现

 if (x == -2147483648) { //如果不做这个判断,下面的x=-x将会报错
            return 0;
        }
        if (x < 0) { // 判断是否为负数
            return -reverse(-x); // 如果是负数则取绝对值调用自身,最后将结果转为负数
        }
        int res = 0;
        while (x != 0) { // 每次得到最后一位数字,并将其作为结果中的当前最高位
            if (res > 214748364) { // 处理溢出
                return 0;
            }
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res <= 0x7fffffff ? res : 0; // 如果溢出就返回0

GO实现

func reverse(x int) int {
    if x < 0 { // 如果是负数就取反递归再取反
        return -reverse(-x)
    }
    
    var res int
    for x != 0 { // 每次得到最后一位数字,并将其作为结果中的当前最高位
        res = res * 10 + x % 10
        x /= 10
    }
    if res <= 0x7fffffff { // 如果溢出就返回0
        return res
    }
    return 0
}

你可能感兴趣的:(LeetCode第5题:整数反转)