实现atoi - leetcode No.8

实现一个 atoi 函数,使其能将字符串转换成整数
重点:

  1. 识别出数字
  2. 将数字字符对应到int数字上
  3. 溢出判断
class Solution(object):
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        dst_s = 0
        re_num1 = re.compile('^\s*-{0,1}\d+')  # '  -234' 
        re_num2 = re.compile('^\s*\+{0,1}\d+')  # '  +234'
        num_dict = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
                    '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        is_neg = False
        match1 = re_num1.search(str)  # 不论字符串中有几组数字,只取第一组
        match2 = re_num2.search(str)  # 针对+123的情况
        if match1:
            num_str = match1.group()
            num_str = num_str.strip()
            if num_str.startswith('-'):
                is_neg = True
                num_str = num_str[1:]
            for i in range(0, len(num_str)):
                dst_s = dst_s * 10 + num_dict.get(num_str[i], 0)
        elif match2:
            num_str = match2.group()
            num_str = num_str.strip()
            if num_str.startswith('+'):
                num_str = num_str[1:]
            for i in range(0, len(num_str)):
                dst_s = dst_s * 10 + num_dict.get(num_str[i], 0)
        dst_s = -dst_s if is_neg else dst_s
        # 判断溢出
        threshold = pow(2,31)
        if dst_s >= threshold:
            dst_s = threshold -1
        elif dst_s < -threshold:
            dst_s = -threshold
        return dst_s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值