【LeetCode】7.Reverse Integer(Python)

Problem

给定32位有符号整数,整数的反向数字。

例1:
输入: 123
输出: 321

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

例3:
输入: 120
输出: 21

注意:
假设我们正在处理一个只能在32位有符号整数范围内存储整数的环境:[ - 21^31, 2^31 - 1]。
出于此问题的目的,假设当反向整数溢出时,函数返回0。

Alogrithmic thinking

我们可以一次建立一个反向整数。在这样做的同时,我们可以事先检查是否附加另一个数字会导致溢出。

算法
反转整数可以与反转字符串类似地完成。


Python3 solotion

solution 1

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
7. Reverse Integer
给定32位有符号整数,整数的反向数字。

例1:
输入: 123
输出: 321

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

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


class Solution:
    def reverse(self, x):
        """
        : type x: int
        : rtype: int
        """
        if x < 0:
            number = int("-" + str(abs(x))[::-1])  # [::-1]表示反转字符串
        else:
            number = int(str(abs(x))[::-1])

        if number > (2 ** 31 - 1) or number < -(2 ** 31):   # 溢出返回0
            return 0
        return number


if __name__ == '__main__':
    num = -123
    result = Solution().reverse(num)
    print(result)


solution 2

class Solution2:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        sign = lambda x: x and (1, -1)[x < 0]
        r = int(str(sign(x)*x)[::-1])
        return (sign(x)*r, 0)[r > 2**31 - 1]


or


class Solution3(object):
    def reverse(self, x):
        s = (x > 0) - (x < 0)
        r = int(str(x*s)[::-1])
        return s*r * (r < 2**31)


48ms解决方案:

class Solution4:
    def reverse(self, x):
        sign = -1 if x <= 0 else 1
        ans = int(str(sign*x)[::-1])
        return ans*sign if ans < 2**31 else 0

你可能感兴趣的:(LeetCode,LeetCode,Python)