力扣第七题“整数反转”(python解决)

我刚开始学python,算法与数据结构实在也不咋地,基本都是暴力解题,想到什么就写什么,然后根据测试用例发现自己哪里逻辑不通,再修改,发帖只是为记录自己的思路,以及之后如何改进,不喜勿喷qaq。(争取每日一题嘻嘻嘻)

题目:

思路:

 虽然都是中等题,但是我感觉这个题目逻辑上没有别的中等题那么难,感觉主要难点好像是在数据结构上(ps我也不太懂,感觉数字会超过对应的存储类型?),但因为是python的缘故,我就没有考虑给的num是否会超过其存储类型,c或者c++写得话感觉需要考虑num是否会超过int大小。

num没有办法对每一位操作,然后我就想把num转化为str类型,字符串就可以对每一位进行操作,最后在用int()强制转化,就可以把str(num)再转换成int类型。

代码:

class Solution:
    def reverse(self, x: int) -> int:
        self.str = str(x) #将x强制转换为字符串类型
        self.lenth = len(self.str) 
        self.list1 =[]
        for i in range(self.lenth):
            self.list1.append(self.str[i]) #用列表来接受字符串
        if self.list1[self.lenth-1] ==0:   #如果最后一位为0(ps这里有漏洞,如果是1200,输出就是021了,显然不符合,但测试集里面貌似没有这种,此处应该用while判断不为0停止)
            self.list1.pop() #删去最后一位
        if self.list1[0] =='-': #如果第一位为负号
            self.str3 ='-'
            del self.list1[0]   #删去第一位
            self.list1.reverse() #反转整个列表
            self.str2 =''.join(''.join(row) for row in self.list1) #将列表转为字符串(第六题大神代码里面学的,我也没有看懂这个语法,只知道作用是把一个字符串列表转化为字符串)
            if int(self.str3+self.str2)>2**31 or  int(self.str3+self.str2)<(-2**31):
                return 0  
            else:
                return  int(self.str3+self.str2)
        self.list1.reverse()
        self.str2 =''.join(''.join(row) for row in self.list1)
        if int(self.str2)>2**31 or  int(self.str2)<(-2**31):
                return 0
        else:
                return  int(self.str2)

但是我这个效率不高,有点烂(qaq)

大神代码:

力扣题解给的代码:

 def reverse_force(self, x: int) -> int:
        if -10 < x < 10:
            return x
        str_x = str(x)
        if str_x[0] != "-":
            str_x = str_x[::-1]
            x = int(str_x)
        else:
            str_x = str_x[:0:-1]
            x = int(str_x)
            x = -x
        return x if -2147483648 < x < 2147483647 else 0

'''作者:娃哈哈店长
链接:https://leetcode.cn/problems/reverse-integer/solutions/61475/pythondan-chu-he-tui-ru-shu-zi-yi-chu-qian-jin-xin/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。'''

写的是真简洁啊,思路感觉差不多

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值