4.2 练手

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

Leetcode 7  Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

解决方法:考虑转换成字符串形式然后进行reverse

需要注意:1.负数要先变成正数再转,不然负号会放到后面转成int的时候有Runtime Error.

                  2.人家给个Note 是需要你考虑如果输出溢出的情况,int类型应该是在 [0x80000000,0x7fffffff]之间,此处用16位补码,因为python 转16进制不太熟悉结果没写MASK=0xFFFFFFFF想了很久是不是leetcode 出问题不包含边界了

以下是代码:

class Solution:
    def reverse(self, x: int) -> int:
        MAX = 0x7FFFFFFF
        MIN = 0x80000000
        MASK = 0xFFFFFFFF
        #int->str should pay attention to negative number
        flag = False
        if x < 0:
            flag = True
            x = -x 
        inputNumStr = str(x)
        outputNumStr = []
        for i in range(len(inputNumStr)):
            outputNumStr.append(inputNumStr[-i-1])
        outputNumStr = ''.join(outputNumStr)
        outputNum = int(outputNumStr)
        if outputNum > MAX and flag == False:
            return 0
        if flag:
            outputNum = -outputNum
            if (outputNum&MASK) < MIN: #complement
                return 0
        return outputNum


## 重看博客的时候发现代码发成错了,改了一下 ##

用字符串真是牺牲空间换时间。

看Discuss 看到了一些有趣的:

(相同思想人家的好简洁)

class Solution:
    def reverse(self, x):
        s=1 if x >0 else -1
        x=x*s
        strx=str(x)
        rst=int((strx[0:])[::-1])
        return rst*s*(rst<0x7FFFFFFF)

另一种解法就是直接算:

class Solution:
    def reverse(self, x):
        if x < 0: return -self.reverse(-x)
        result = 0
        
        while x > 0:
            result = result * 10 + x % 10           
            x = int(x/10)
        return 0 if result > 0x7FFFFFFF else result

但是这种用时和空间复杂度都没我自己写的好。。。

猜你喜欢

转载自blog.csdn.net/vancooler/article/details/88974856
4.2