class Solution:
def strToInt(self, str: str) -> int:
'''
^:匹配字符串开头
[\+\-]:代表一个+字符或-字符
?:前面一个字符可有可无
\d:一个数字
+:前面一个字符的一个或多个
'''
#正则表达式
INT_MAX = 2147483647
INT_MIN = -2147483648
s= str.strip()
res = re.compile(r'^[\+\-]?\d+')
num = res.findall(s)
print(num)
#收集列表里面的值
nums = int(*num)
return max(min(nums, INT_MAX), INT_MIN)
#朴素写法
str = str.strip()
if not str or (len(str)>0 and str[0].isalpha()):
return 0
res = ''
index=0
if str[0]=='-' or str[0]=='+':
index+=1
for i in range(index,len(str)):
if str[i].isdigit():
res+=(str[i])
else:
break
if res:
if index:
res = int(res) if str[0]=='+' else -int(res)
else:
res = int(res)
if res>=2**31-1:
return 2**31-1
elif res<=-2**31:
return -2**31
else:
return res
else:
return 0
总结:两种做法:①正则表达式,高效简洁;②朴素判断,代码冗余,清晰。