美文网首页
[LeetCode]8、字符串转整数

[LeetCode]8、字符串转整数

作者: 河海中最菜 | 来源:发表于2019-07-27 13:02 被阅读0次

    题目描述

    示例 1:

    输入: "42"
    输出: 42
    示例 2:

    输入: " -42"
    输出: -42
    解释: 第一个非空白字符为 '-', 它是一个负号。
    我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
    示例 3:

    输入: "4193 with words"
    输出: 4193
    解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
    示例 4:

    输入: "words and 987"
    输出: 0
    解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
    因此无法执行有效的转换。
    示例 5:

    输入: "-91283472332"
    输出: -2147483648
    解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
    因此返回 INT_MIN (−231) 。

    思路:

    1、注意第一个正负号,是否存在
    2、判断是否是数字,否则返回
    3、数值范围不要超出范围
    4、去除开头空格

    class Solution:
        #     def myAtoi(self, str: str) -> int:
        #         return max(min(int(*re.findall('^[\+\-]?\d+', str.lstrip())), 2**31 - 1), -2**31)
    
        def myAtoi(self, str):
            if not str or len(str) == 0:
                return 0
            start = 0
            sign = 1
            ans = 0
            str = str.lstrip()
            if not str or len(str) == 0:
                return 0
            if str[0] == "-":
                sign = -1
                start = 1
            elif str[0] == "+":
                start = 1
            for i in range(start, len(str)):
                if not str[i].isdigit():
                    return ans * sign
                ans = 10 * ans + (ord(str[i]) - ord("0"))
                if ans > 2 ** 31 - 1:
                    return 2 ** 31 - 1 if sign == 1 else - 2 ** 31
            return ans * sign
    
    
    AC8

    相关文章

      网友评论

          本文标题:[LeetCode]8、字符串转整数

          本文链接:https://www.haomeiwen.com/subject/lczsrctx.html