Easy 7 – 整数反转

题目描述:

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

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

首先来看我的蠢钝如猪版本:

class Solution:
    def reverse(self, x: int) -> int:
        if x == 0:
            return 0
        indicator = 1
        if x < 0:
            indicator = -1
            x = -x
        store_digit = []
        while x != 0:
            one_digit = x%10
            store_digit.append(one_digit)
            x = int(x/10)
        tens = 1
        product = 0
        for number in reversed(store_digit):
            product = product + number * tens
            tens *= 10
        number_reverse = indicator * product
        if number_reverse < -(2**31) or number_reverse > (2**31)-1:
            return 0
        return number_reverse

但是有一说一,想到用字符串的方法其实会引出一个更优解,只是我没有仔细考虑。(其实就是能力到这儿了。

先睡觉了,明天起来再写后面的。

摸了一天的鱼,终于开始做点正事。

昨天说了,从字符串的角度来进行处理也是可以的,尝试了一下:

class Solution:
    def reverse(self, x: int) -> int:
        abs_num = abs(x)
        sign = 1
        if x < 0:
            sign = -1
        num_reverse = sign * int(str(abs_num)[::-1])
        if abs(num_reverse) > 2**31:
            return 0
        return num_reverse

看起来反正比昨天的短很多,但是从运行的结果上来看的话,甚至表现还不如单纯从数字考虑的版本,但是我觉得对我来说能从两个角度考虑这个问题已经很好了,剩下的以后再说吧。

Leave a Reply