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