leetcode-8-字符串转换整数(atoi)
题目描述:
方法一:正则
class Solution: def myAtoi(self, str: str) -> int: return max(min(int(*re.findall('^[\+\-]?\d+', str.lstrip())), 2**31 - 1), -2**31)
方法二:
利用双指针加eval()函数
思路:
思路:
用left=0,right标记第一个数字和最后一个数字出现的位置
首先strip()去掉左右的空格
然后判断第一个字符是不是正负号,是的话left置为1
判断left后一个字符是否为数字,不是直接返回0
遍历不断更新right,找到第一个不是数字的字符后break
用res=str[left:right+1]提取纯数字字符串
需要注意的是,可能数字全为0.所以用lstrip()将左边的0清除
最后利用eval()函数将双引号去除,并判断是否需要填正负号
注意一些细节就ok了
下面代码都写有注释,用时28ms时间复杂度o(n)
class Solution: def myAtoi(self, str: str) -> int: str = str.strip() if str == "": return 0 left = 0 right = 0 maxi=2147483647 mini=-2147483648 if str[0]=="+" or str[0]=="-": left = 1 if(left==1 and len(str)==1) or str[left]<"0" or str[right]>"9": return 0 for i in range(left,len(str)): if str[i]>='0' and str[i]<='9': right = i else: break res = str[left:right+1].lstrip("0") if len(res)==0: return 0 else : res=eval(res) if left==1 and str[0]=='-':#判断正负 res=-res if res>maxi: return maxi elif res<mini: return mini else : return res