• leetcode——8. 字符串转换整数 (atoi)


    看着挺简单,结果不断出错不断修改,就很容易绕晕了,用了一个小时四十分钟左右才完成。。。好慢哦:

    class Solution(object):
        def myAtoi(self, str):
            """
            :type str: str
            :rtype: int
            """
            a=str.lstrip()
            if len(a)<1:
                return 0
            if len(a)==1:
                if a[0] not in '0123456789':
                    return 0
                else:
                    return int(a)
    
            if a[0]!='-' and a[0]!='+' and a[0] not in '0123456789':
                return 0
            i=0
            while i<len(a)-1:
                if a[1:][i] not in '0123456789':
                    if a[:i+1]=='+' or a[:i+1]=='-' :
                        return 0
                    if int(float(a[:i+1]))>2**31-1:
                        return  2**31-1
                    elif int(float(a[:i+1]))<-2**31:
                        return  -2**31 
                    return int(float(a[:i+1]))
                else:
                    i+=1
            if int(float(a))>2**31-1:
                return 2**31-1
            elif int(float(a))<-2**31:
                return  -2**31
            return int(float(a))
    执行用时 :28 ms, 在所有 Python 提交中击败了72.82%的用户
    内存消耗 :11.7 MB, 在所有 Python 提交中击败了35.29%的用户
    执行用时为 8 ms 的范例
    class Solution(object):
        import re
        def myAtoi(self, str):
            """
            :type str: str
            :rtype: int
            """
            return max(min(int(*re.findall('^[+-]?d+',str.lstrip())),2**31 -1),-2**31)

    * 表示是一个不定长的列表;
    '^[+-]?d+'
    ^ 匹配字符串的开头
    [...]用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'
    re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
    d 匹配任意数字,等价于[0-9]
    re+ 匹配一个或者多个的表达式

                                                                                                               ——2019.10.11


    自己的做法过于简单粗暴,还是官方题解比较靠谱,学到了学到了,我自己虽然可以耗出来,但是总是花费了太多时间以及代码过于冗余。

    class Solution {
        public int myAtoi(String str) {
            //首先去除首尾的空格
            str = str.trim();
            int len = str.length();
            if(len == 0){
                return 0;
            }
            int i = 0;
            int sign = 1;
            int sum = 0;
            if(str.charAt(i) == '+'){
                i++;
            }else if(str.charAt(i) == '-'){
                sign = -sign;
                i++;
            }
            for(;i<len;i++){
                if(str.charAt(i) > '9' || str.charAt(i) < '0'){
                    break;
                }
                if(sum > MAX_VALUE / 10 || (sum == MAX_VALUE / 10 && (str.charAt(i) - '0') > MAX_VALUE % 10)){
                    return sign == 1 ? MAX_VALUE:MIN_VALUE;
                }
                sum = 10*sum + str.charAt(i) - '0';
            }
            return sum * sign;
        }
    }

    ——2020.7.6

     
     
     
    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    I Show
    Centos上安装Google Authenticator
    linux 上mailx通过465端口发送邮件
    Win10 RDP CredSSP报错处理
    linux 双网卡代理上网
    English trip EM3-LP2B Teacher:Taylor
    【BZOJ1984】月下“毛景树”-树链剖分
    c++ 数据对拍器
    【BZOJ2157】旅游-树链剖分
    游戏-博弈论-树形DP
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/11655542.html
Copyright © 2020-2023  润新知