首页 > 其他 > 详细

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

时间:2019-07-09 12:36:53      阅读:149      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

技术分享图片

技术分享图片

 

 方法一:正则

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
                

 

 

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

原文:https://www.cnblogs.com/oldby/p/11156160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!