LeetCode:整数反转

题目要求

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

示例

示例 1:

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

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21

解法一:

把正负数统一取绝对值进行反转操作,最后返回时再加上正负号。

要考虑是否超出32位数字的存储范围。

class Solution(object):
    def reverse(self, x):
        nums = []
        out_num = 0
        x_ = x
        # 如果是负数,先转化为正数进行操作。
        if x_ < 0:
            x = -x
        # 将给定数字的绝对值的每一位倒序存到数组nums里。
        while(1):
            if x < 10:
                break
            nums.append(x % 10)
            x /= 10
        nums.append(x)
        # 将数组nums里的数求出,求得给定数字的绝对值数字反过来的数值。
        n = len(nums)
        for i in range(n-1):
            out_num = (out_num + nums[i]) * 10
        out_num += nums[-1]
        # 检测是否超出32位存储范围,加上正负号,返回要求的数字。
        if x_ >= 0:
            return out_num if -2147483648 < out_num < 2147483647 else 0
        else:
            return out_num * (-1) if -2147483648 < out_num * (-1) < 2147483647 else 0

你可能感兴趣的:(LeetCode)