第六题,Reverse Integer

Questions:

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.

 

Code:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x < 0:
            a = list(str(abs(x)))[::-1]
            b = "".join(a)
            if (0-int(b) < -2147483648):
                return 0
            else:
                return (0-int(b))
        else:
            # a = list(str(x))[::-1]
            a = list(str(x))
            a.reverse() # reverse() 和[::-1]作用相同
            print(a)
            b = "".join(a)
            if (int(b) > 2147483648):
                return 0
            else:
                return int(b)
    def reverse2(self,x):
        rev = 0
        flag = 0
        if x < 0:
            x=abs(x)
            flag = 1
        while x != 0:
            pop = x % 10  # 取出最后位的一个数
            x = int(x/10) # 取出最后位一个数后剩下的数
            if rev > 2147483648 /10 or (rev == 2147483648/10 and pop >7 ):
                return 0
            # if rev < 2147483648 / 10 or (rev == 2147483648 / 10 and pop < -8):
            #     return 0
            rev = rev * 10 + pop # 把数反转过来,高位变低位,低位变高位
        if flag == 1:
            return 0-rev
        return rev
s = Solution()

print("The first method:")
print(s.reverse(123))
print(s.reverse(120))
print(s.reverse(-321))
print(s.reverse(1534236469))

print("The second method:")
print(s.reverse2(123))
print(s.reverse2(120))
print(s.reverse2(-321))
print(s.reverse2(1534236469))

Result:

The first method:
['3', '2', '1']
321
['0', '2', '1']
21
-123
['9', '6', '4', '6', '3', '2', '4', '3', '5', '1']
0
The second method:
321
21
-123
0

 

第一个方法比较好理解,关键是取绝对值abs(),int转str,再转list,list取反。然后换成str再换成int。

第二个方法是利用 %10取最低位,类似于pop出最低位,剩下的数就是 x=int(x/10), 然后push进去,方法就是 rev = rev * 10 + pop,低位变高位高位变低位。

第二个方法的复杂度是:

  • Time Complexity: O(log(x)). There are roughly log10​(x) digits in xx.
  • Space Complexity: O(1).

转载于:https://my.oschina.net/u/3784241/blog/3001964

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值