整数反转问题

整数反转

题目:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

思路分析:

1、反转:整数不可变不可迭代,无法操作。转化为str 用反向切片,或者列表的reverse()方法。但创建列表需要额外空间,故采用字符串的反向切片。
2、符号:单独用条件判断,不参与反转过程

def reverse(x):   # x:int
     if not x:   # 0 返回0
            return 0
        str_x = str(x)
        str_number = str_x.rstrip('0')    # 整数不可变不可迭代,无法操作,转化为str    
        if str_x[0] == ('-' or '+'):    # 有符号
            result = int(str_x[0] + str_number[:0:-1])
        else:    # 无符号
            result = int(str_number[::-1])
        if not -pow(2, 31) <= result <= pow(2, 31) - 1:  # 必须同时满足:在范围内+不是空(0)
            return 0
        return result   

注意事项:

1、str_number = str_x.rstrip('0')
字符串的lstrip(), rstrip(), strip()方法,返回的使去除首尾指定字符后的副本,并没有修改原字符串。因此要用变量接一下。
类似的还有列表的sorted()方法,返回的也是副本,不修改原列表。(但列表的reverse()、sort()方法直接修改列表本身)

2、因为采用了rstrip(‘0’),如果输入为0,那么这里变为空字符穿,后续int()后为None。因此单独讨论。

3‘result = int(str_x[0] + str_number[:0:-1])
反向切片,左闭右开。第一个取不到。[:0:-1]

4、str_x = str(x)
我第一次写,没有将str(x)用变量存储,而是后面每需要一次,就用str()转化一次。
后来尝试用变量存储后,执行时间减少8ms。
启发:多次使用某个方法/函数等时,先用变量存储,节约资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值