Для тех, кто интересуется окончательным ответом на этот вопрос, это:
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 мс, быстрее, чем 47,19% онлайн-представлений Python3 для String to Integer (atoi). Использование памяти: 13,9 МБ, менее 5,95% онлайновых представлений Python3 для строки в целое число (atoi).