一天的划水又结束了,上班太无聊,还是好好敲点代码开心一下吧。
leetcode第八题:
题目描述:
请你来实现一个 atoi
函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
思路和复盘:看到这个题目第一个感觉用正则去做,匹配出所有的数字,然后将数字连接起来,但是正则匹配是挺耗费空间和时间,觉得不如遍历字符串来的快捷,所以就用遍历字符串来解决这个问题,下面贴上代码。
class Solution:
def myAtoi(self, str: str) -> int:
num1=''
result=''
str=str.strip()
if (len(str) > 0):
if((str[0].isdigit() or str[0] == '-' or str[0] == '+') ):
num1=num1+str[0]
for tep in str[1:]:
if(tep.isdigit()):
num1=num1+tep
else:
break
print(num1)
if (num1 == '+' or num1 == '-'):
return 0
print(num1)
if(int(num1)>2**31-1 ):
return 2**31-1
if(int(num1)<-(2**31)):
return -(2**31)
return int(num1)
else:
return 0
else:return 0
运行结果:
执行用时 : 64 ms, 在String to Integer (atoi)的Python3提交中击败了84.10% 的用户
内存消耗 : 13.2 MB, 在String to Integer (atoi)的Python3提交中击败了52.87% 的用户
还不算太差,等明天上班优化下内存消耗