请你来实现一个 myAtoi(string s)
函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi
函数)。
函数 myAtoi(string s)
的算法如下:
0
。必要时更改符号(从步骤 2 开始)。[−231, 231 − 1]
,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231
的整数应该被固定为 −231
,大于 231 − 1
的整数应该被固定为 231 − 1
。注意:
' '
。
示例 1:
输入:s = "42" 输出:42 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。 第 1 步:"42"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"42"(读入 "42") ^ 解析得到整数 42 。 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
示例 2:
输入:s = " -42" 输出:-42 解释: 第 1 步:" -42"(读入前导空格,但忽视掉) ^ 第 2 步:" -42"(读入 '-' 字符,所以结果应该是负数) ^ 第 3 步:" -42"(读入 "42") ^ 解析得到整数 -42 。 由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
示例 3:
输入:s = "4193 with words" 输出:4193 解释: 第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止) ^ 解析得到整数 4193 。 由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。
示例 4:
输入:s = "words and 987" 输出:0 解释: 第 1 步:"words and 987"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"words and 987"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"words and 987"(由于当前字符 'w' 不是一个数字,所以读入停止) ^ 解析得到整数 0 ,因为没有读入任何数字。 由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。
示例 5:
输入:s = "-91283472332" 输出:-2147483648 解释: 第 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"-91283472332"(读入 '-' 字符,所以结果应该是负数) ^ 第 3 步:"-91283472332"(读入 "91283472332") ^ 解析得到整数 -91283472332 。 由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648 。
提示:
0 <= s.length <= 200
s
由英文字母(大写和小写)、数字(0-9
)、' '
、'+'
、'-'
和 '.'
组成class Solution:
def myAtoi(self, s: str) -> int:
sum = 0
n = len(s)
if(n <=0 ):
return 0
elif(n==1 and (not s[0].isdigit())):
return 0
result = []
res = 0
flag = 1
for i in range(0,n):
if len(result)==0 and (not s[i].isdigit()) and s[i]!='-' and s[i]!='+' and s[i]!=' ':
return 0
elif len(result)==0 and s[i]==' ':
continue
elif len(result)==0 and s[i]=='-':
flag = -1
result.append(s[i])
elif len(result)==0 and s[i]=='+':
flag = 1
result.append(s[i])
elif (not s[i].isdigit()):
break
else:
result.append(s[i])
ler = len(result)
if ler < 1:
return 0
elif ler==1 and (result[0]=='+' or result[0]=='-'):
return 0
else:
if (result[0]=='+' or result[0]=='-'):
for i in range(1,ler):
t = int(result[i])
sum = sum*10+t
else:
for i in range(ler):
t = int(result[i])
sum = sum*10+t
sum = sum * flag
if sum<-2147483648:
return -2147483648
if sum>2147483647:
return 2147483647
return sum
执行结果:
通过
显示详情
执行用时:48 ms, 在所有 Python3 提交中击败了45.24%的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了81.88%的用户