力扣——8字符串转换整数

在这里插入图片描述
下面的两块代码是其他人的,我挑选了比较简短的记录一下,这两种都用了正则约束的方法,我不太熟悉,所以用自己的思路写了

class Solution:
    def myAtoi(self, s: str) -> int:
        return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)
class Solution:
    def myAtoi(self, s: str) -> int:
        import re
        s = s.strip()
        num = re.findall('^[-+]?\d+', s)
        if not num:
            return 0
        ans = int(*num)
        return min(max(ans, -pow(2, 31)), pow(2, 31) - 1)

解题思路

我自己的思路,比较复杂一些,一直提交了7次都有错误,按照出错的测试用例调试,最后第8次成功通过,开心。
1.先去掉空格
2.字符串为空或者是以字母开头都直接返回0
3.添加一个空列表m,sign变量用来记录符号
4.如果去掉空格后的s以+或-号开头,则将符号记录到sign中,之后删除掉第一个+或-号,多个时删除一个
5.遍历s,将数字字符添加到m中,如果m读不到数字,则直接返回0
6.判定界限,注意要用带上sign记录的符号,否则都是正数,会出现错误
7. 审题时题目要求超界的话返回界值
8. 其余情况返回0

代码

class Solution:
    def myAtoi(self, s: str) -> int:
       s = s.lstrip()
       if s == "" or s[0].isalpha():  # 字符下标超界,所以加了s == ""
           return 0
       m = []
       sign = 1
       if s[0] == '-':
           sign = -1
           s = s.replace(s[0], '', 1)  # 如果有多个-号,会删除前面多个,所以换成了replace方法
       elif s[0] == '+' :
           sign = 1
           s = s.replace(s[0], '', 1)  # 多个+号都会被删除,换成了replace
       for i in s:
           if i in ['0','1', '2', '3', '4', '5', '6', '7', '8', '9']:
                m.append(i)
           else:
                break
       if m == []:
           return 0
       if -2**31 < sign * int(''.join(m)) < 2**31 - 1: # 起初判断的时候没有乘sign,相当于是绝对值
           return sign * int(''.join(m))
       elif sign * int(''.join(m)) < sign * -2 ** 31 or sign * int(''.join(m)) == -2**31:
           return -2**31
       elif sign * int(''.join(m)) > 2 ** 31 - 1 or sign * int(''.join(m)) == 2 ** 31 - 1:
           return 2**31 - 1
       else:
           return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值