Leetcode题库——8.字符串转为整数【##】


@author: ZZQ
@software: PyCharm
@file: myAtoi.py
@time: 2018/9/20 20:54
要求:实现 atoi,将字符串转为整数。

1)根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止
2)如果第一个非空字符是正号或负号,选取该符号;
3) 将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。
4) 如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
5) 字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。
6) 当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。
7) 若函数不能执行有效的转换,返回 0。

说明:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。
如果数值超过可表示的范围,则返回 INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。

class Solution():
    def __init__(self):
        pass

    def myAtoi(self, str):
            """
            :type str: str
            :rtype: int
            """
            # 导入正则模块
            import re
            # 字符串中查找全部符合条件的整数,返回的是列表,第一个参数是正则,第二个参数是字符串
            # strip()字符串去空格
            ret = re.findall(r"^[-+]?\d+", str.strip())
            # 判断是否有匹配的值,没有的话返回0,例如"word values 987",匹配不到,返回0
            if ret:
                ret_str = ret[0]  # 匹配的数字的字符串
                ret_str2 = ""  # 记录去符号的字符串,ret_str后面还要使用,所以定义一个新的变量记录
                # 判断是否带有符号 + or -
                if ret_str[0] == "-" or ret_str[0] == "+":
                    ret_str2 = ret_str[1:]
                else:
                    ret_str2 = ret_str
                # str转int
                ret_int = int(ret_str2)
                # 判断第一个字符是否为负号
                if ret_str[0] == "-":
                    # 三目运算符,判断是否溢出
                    # 如果ret_int <= 2**31则返回-ret_int,否则返回-2**31
                    return -ret_int if ret_int <= 2**31 else -2**31
                else:
                    return ret_int if ret_int < 2**31 else 2**31-1
            else:
                return 0

if __name__ == "__main__":
    answer = Solution()
    str = "   -42"
    print(answer.myAtoi(str=str))

posted @ 2018-09-28 22:20  恩zzq我是  阅读(148)  评论(0编辑  收藏  举报