LeetCode0008. 字符串转换整数 (atoi)

一. 题目
  1. 题目
    在这里插入图片描述
  2. 示例
    在这里插入图片描述
二. 方法一: 暴力
  1. 解题思路
    本题解题思路比较简单, 但是要考虑的情况比较多, 我也是多次提交才把所有情况考虑周全,
    具体情况在代码中标注出来了

  2. 解题代码

    def myAtoi(self, s: str) -> int:
    	# 去掉字符串左侧的所有空格
        str1 = s.lstrip()
    	# 如果str1为空, 直接返回0, 如果不进行处理, 后面取第一个元素时还会报异常
        if not str1:
            return 0
        # 如果str1的长度为1, 并且是"+" 或 "-"这两个值, 则直接返回0
        if len(str1) == 1 and (str1[0] == '-' or str1[0] == '+'):
            return 0
    	# 将0 - 9 这10个字符放在列表中, 用于后续的判断
        list1 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
        # 如果str1第一个字符不是数字, "+"和"-", 则表示以字母开头, 直接返回0
        if (str1[0] not in list1) and (str1[0] != '-') and (str1[0] != '+'):
            return 0
        else:
        	# 将第一个字符保存到str2中, 可能是数字或者"+"和"-"
            str2 = str1[0]
        # 从第二个字符开始遍历, 如果是数字的字符就加入到str2中, 直到遇到非数字的字符
        for i in range(1, len(str1)):
            if str1[i] in list1:
                str2 += str1[i]
            else:
                break
        # 如果str2长度为1, 并且是"+" 或者 "-", 则返回0
        if len(str2) == 1 and str2[0] not in list1:
            return 0
        num = int(str2)
        # 超过范围需要处理
        if num > 2 ** 31 - 1:
            return 2 ** 31 - 1
        elif num < -2 ** 31:
            return -2 ** 31
        else:
            return num
    
  3. 分析
    时间复杂度: O(n)
    可架构在的: O(1)

三. 方法二: 自动机(官方)

后续再看题解,

四. 方法三: 正则表达式(拓展)
  1. 解题思路
    运用正则表达式写出满足题解的规则, 然后返回即可

  2. 解题代码

    import re
    def myAtoi(self, s: str) -> int:
        int_max = 2 ** 31 - 1
        int_min = - 2 ** 31
        str1 = s.lstrip()
        # 设置正则规则
        num_re = re.compile(r'^[\+\-]?\d+')
        # 查找匹配的内容
        num = num_re.findall(str1)
        # 由于返回的是个列表,解包并且转换成整数
        num = int(*num)
        return max(min(num, int_max), int_min)
    
  3. 分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值