題意:
很easy的一道題啊,就是實現一些c語言atoi()將字符轉化爲integer的函數.
##思路:
按照題目要求,然後注意下細節其實就可以了.
class Solution:
def myAtoi(self, _str):
_str = _str.strip()
if _str == "":
return 0
_len,flag = 0,0
if _str[0] == '-' or _str[0] == '+':
flag = 1
for i in _str[flag:]:
if i >= '0' and i <= '9':
_len += 1
else:
break
if _len == 0:
return 0
ans = int(_str[:_len + flag])
if ans < -2**31:
return -2**31
elif ans > 2**31 - 1:
return 2**31 - 1
else:
return ans
但是記錄下來 主要是該題可以使用python中的正則表達式(regular expression)來簡單的完成.
首先我們先總結下py中的正則表達式.
正則表達式
部分轉載來源
正則表達式並不是python本身的一部分,它是一個極其強大的處理字符串的工具,被集成在re模塊中.
下圖列出了python支持的正則表達式元字符和語法:
{% asset_img 1.png %}
貪婪模式與非貪婪模式
正則表達式通常用於在文本中查找匹配的字符串.python裏數量詞默認是貪婪的,總是嘗試儘可能匹配更多的字符,非貪婪的則相反,它總是嘗試匹配儘可能少的字符.例如:正則表達式"ab*“如果用於查找"abbbc”,將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a"。
re模塊
見
本題中我們需要使用re中的search和match object的group即可.
正則表達式爲:r"^ *[-+]?[0-9]+"
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
match = re.search(r"^ *[-+]?[0-9]+", str)
if match:
match = int(match.group())
if match < -2**31:
return -2**31
elif match > 2**31-1:
return 2**31-1
return match
return 0