代码问题
我正在尝试解决leetcode问题8 String to integer(atoi)。但是我遇到了运行时错误。
TypeError:“ str”对象不可调用 myAtoi(Solution.py)中的第9行
我了解这是由于调用了字符串对象,但似乎无法弄清楚要解决的问题。
class Solution:
def myAtoi(self,str: str) -> int:
string = str.strip()
if string[0]=='-' or string[0]=='+' or string[0].isdigit():
new = string[0]
for i in range(1,len(string)):
if string[i].isdigit():
new = new+string[i]
if i!=len(string)-1 and (string[i+1]==' ' or string(i+1).isalpha()):
break
if(int(new)>=0):
if((int(new) & 0x7fffffff)==int(new)):
return int(new)
else:
return int(0x7fffffff)
else:
if((int(new) & -0x80000000)==int(-0x80000000)):
return int(new)
else:
return int(-0x80000000)
有人可以告诉我这里要解决的问题吗?
问题答案
您在前if
中没有返回任何内容,并且在字符串调用中出错,您使用()
而不是[]
,正确的代码将是:
class Solution:
def myAtoi(self,str: str) -> int:
string = str.strip()
if string[0]=='-' or string[0]=='+' or string[0].isdigit():
new = string[0]
for i in range(1,len(string)):
if string[i].isdigit():
new = new+string[i]
if i!=len(string)-1 and (string[i+1]==' ' or string[i+1].isalpha()):
break
if(int(new)>=0):
if((int(new) & 0x7fffffff)==int(new)):
return int(new)
else:
return int(0x7fffffff)
else:
if((int(new) & -0x80000000)==int(-0x80000000)):
return int(new)
else:
return int(-0x80000000)
else:
return 0
print(Solution().myAtoi("abc"))
print(Solution().myAtoi("ab"))
print(Solution().myAtoi("a"))
print(Solution().myAtoi("abc d e fgh"))
print(Solution().myAtoi("452 abc d e fgh"))
print(Solution().myAtoi("abc d e fgh 452"))
print(Solution().myAtoi(" -42"))
,
对于任何想知道这个问题的最终答案的人,是:
class Solution:
def myAtoi(self,str: str) -> int:
string = str.strip()
if not string:
return 0
if not string.strip("+-"):
return 0
if string[0]=='-' or string[0]=='+' or string[0].isdigit():
new = string[0]
for i in range(1,len(string)):
if string[i].isdigit() or string[i]=='.':
new = new+string[i]
if i!=len(string)-1 and (string[i+1]==' ' or string[i+1].isalpha()):
break
elif string[i]=='-' or string[i]=='+':
break
elif string[i].isalpha():
break
else:
return 0
new2 = new.strip("+-")
if new2:
if(int(float(new))>=0):
if((int(float(new)) & 0x7fffffff)==int(float(new))):
return int(float(new))
else:
return int(0x7fffffff)
else:
if((int(float(new)) & -0x80000000)==int(-0x80000000)):
return int(float(new))
else:
return int(-0x80000000)
else:
return 0
else:
return 0
这是最佳解决方案吗?没有!但是我能想到的最好的。
运行时:44毫秒,比Python 3在线提交的String to Integer(atoi)快47.19%。 内存使用量:13.9 MB,不到Python3在线提交的String to Integer(atoi)的5.95%。
如果觉得前端之家所整理的内容很不错的话,欢迎点击下方分享按钮,转发给身边开发程序员好友。