leetcode-8-字符串转换整数(atoi)

题目描述:

leetcode-8-字符串转换整数(atoi)

leetcode-8-字符串转换整数(atoi)

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