7. 整数反转(Python)

更多精彩内容,请关注【力扣简单题】

题目

难度:★☆☆☆☆
类型:数学

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

示例

示例 1:

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

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

输入: 120
输出: 21

解答

方案1:转成字符串

注意两个选择就好:
1.正负数字的不同对待;
2.最后结果是否越界。

class Solution:
    def reverse(self, x):
        chars = list(str(x))    # 将输入数字转换成为字符串列表
        if x < 0:
            chars.remove('-')   # 去除负号
            chars.reverse()     # 逆序
            r = ''.join(chars)  # 合并成字符串
            r = - int(r)     # 返回结果

        else:
            chars.reverse()     # 逆序
            r = ''.join(chars)  # 合并成字符串
            r = int(r)       # 返回结果

        if not -pow(2, 31) <= r <= pow(2, 31) - 1:
            r = 0
        return r

还有一个Python精简版,道理一样的:

class Solution:
    def reverse(self, x):
        r = int('-' + ''.join(reversed(list(str(x).strip('-'))))) if x < 0 else int(''.join(reversed(list(str(x).strip('-')))))
        return r if -pow(2, 31) <= r <= pow(2, 31) - 1 else 0

方案2:取余

我们在反转的时候,只需要定义一个新变量num,初始值为0,不断将输入值用除以10取余的方式取出最后的数tmp,该变量乘以10加tmp获得当前数,不断迭代下去直到输入数字从右到左所有数字都被搬移到新变量num中即可。

class Solution:
    def reverse(self, x):

        num = 0
        if x == 0:
            return 0
        if x < 0:
            x = -x
            while x != 0:
                num = num * 10 + x % 10
                x = x / 10
            num = -num
        else:
            while x != 0:
                num = num * 10 + x % 10
                x = x / 10

        if num > pow(2, 31) - 1 or num < pow(-2, 31):
            return 0
        return num

如有疑问或建议,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。