1. 程式人生 > 實用技巧 >LeetCode --- 字串轉整數

LeetCode --- 字串轉整數

題目描述

請你來實現一個 atoi 函式,使其能將字串轉換成整數。
首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第一個非空格的字元為止。接下來的轉化規則如下:
如果第一個非空字元為正或者負號時,則將該符號與之後面儘可能多的連續數字字元組合起來,形成一個有符號整數。
假如第一個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成一個整數。
該字串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函式不應該造成影響。
注意:假如該字串中的第一個非空格字元不是一個有效整數字符、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。
在任何情況下,若函式不能進行有效的轉換時,請返回 0 。
提示:
本題中的空白字元只包括空格字元 ' ' 。
假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 \([−2^{31}, 2^{31} − 1]\)

。如果數值超過這個範圍,請返回\(INT\_MAX(2^{31} − 1)\)\(INT\_MIN(−2^{31})\)

示例

題解

class Solution:
    def myAtoi(self, str1: str) -> int:
        string = str1.strip()
        if string in ['', '+', '-']: #直接過濾簡單非法情況
            return 0
        numberic_char = [str(i) for i in range(0, 10)] # 數字字元列表
        signal = 1 # 正、負符號
        if string[0] in set(('+','-')): 
            signal = 1 if string[0] == '+' else - 1
            string = string[1:]
        elif string[0] not in numberic_char:
            return 0
        index = 0
        while index <= len(string) - 1: # 找到第一位非數字字元
            if string[index] not in numberic_char:
                break
            index = index + 1
        string = string[0:index]   # 截斷前面的數字字串
        res = 0 if string == '' else int(string)
        if res > pow(2, 31) - 1 and signal==1: # 判斷大小是否出界
            return pow(2, 31)-1
        elif res > pow(2, 31) and signal==-1:
            return -pow(2,31)
        else:
            return signal*res

效果