本題題意是要自己寫一個atoi函數(將字符串轉換成整數),有幾處細節需要考慮:
1.數字前面有空格,如s=" 123456",空格需捨棄。
2.數字前出現了非數字字符導致轉換失敗,輸出0。如s=" b1234",s=" ++1233", s=" ±1121"。
3.數字中出現了不必要的字符,返回字符前的數字。如s=" 12a1", s=" 123 123"。
4.數字越界,超過了範圍 [−2^31, 2^31 − 1],分別返回INT_MAX (2^31 − 1) or INT_MIN (−2^31)。
5.字符串以‘+/-’開頭的,轉換時要帶上。
實現代碼如下:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
# solution 1
str = str.strip()
s = 1
if len(str) == 0:
return 0
if str[0] == '-':
s = -1
str = str[1:]
elif str[0] == '+':
str = str[1:]
if len(str) == 0:
return 0
if not str[0].isdigit():
return 0
index = 0
for i in range(len(str)):
if str[i].isdigit():
index = i + 1
else:
index = i
break
r = int(str[:index]) * s
if r < - 2**31:
return - 2**31
elif r > 2**31 - 1:
return 2**31 - 1
return r
看了評論區後,用正則表達式來實現,修改爲:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
# solution 2
import re
str = str.strip()
r = re.findall('^[+-]?\d+', str)
if not r:
return 0
ret = int(r[0])
if ret < - 2**31:
return - 2**31
elif ret > 2**31 - 1:
return 2**31 - 1
return ret