整数反转

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

示例 1:  输入: 123
         输出: 321
示例 2:  输入: -123
         输出: -321
示例 3:  输入: 120
         输出: 21
注意:  假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:https://leetcode-cn.com/problems/reverse-integer/

法一:自己的代码

特点:内存大,耗时短

思路:先判断正负并记录,再将int转为string删除末尾的0,对其进行分割后反序,最后转为int,加上符号输出

class Solution:
    def reverse(self, x: int) -> int:
        if x == 0:
            return 0
        else:
            if x >= 0:
                sign = 1
            else:
                sign = -1
                x = abs(x)
            # 去掉末尾的0
            x = str(x).rstrip('0')
            def fenge(element):
                return element
            # 分割 反转 连接
            x_list = list(map(fenge, x))
            x_list.reverse()
            x_afterreverse = ''.join(x_list) # join函数用于连接list中的字符串

            # print(x_afterreverse)
            # print(x_list)
            # print(type(x_afterreverse))

            x_afterreverse = int(x_afterreverse)

            if ( x_afterreverse > 2 ** 31) or ( x_afterreverse <= -2 ** 31):
                print('绝对值太大了')
                return 0
            else:
                return x_afterreverse * sign


if __name__ == '__main__':
    duixiang = Solution()

    ww = duixiang.reverse(0)
    print('结果是:', ww)
View Code

 法二:思路同法一,但很简洁

思路:先利用切片对字符串进行反转,并去掉负号,再对其判断是否超返回,并返回结果。

class Solution(object):
    def reverse(self, x: int) -> int:
        s = str(x)[::-1].rstrip('-')  # 如果有负号去掉负号变为正数
        print(s)
        print(type(s))
        if int(s) < 2 ** 31:
            if x >= 0:
                return int(s)
            else:
                return 0 - int(s)
        return 0

if __name__ ==  '__main__':
    duixiang = Solution()

    kk = duixiang.reverse(-4556635)
    print(kk)
View Code

 

posted on 2019-08-18 17:16  吃我一枪  阅读(148)  评论(0编辑  收藏  举报

导航