1. 程式人生 > >Leetcode篇:字符串轉為整數

Leetcode篇:字符串轉為整數

lse 是個 all dal 超過 init soft 多余 說明


@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))

Leetcode篇:字符串轉為整數