我刚开始学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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。'''
写的是真简洁啊,思路感觉差不多