LeetCode String to Integer (atoi) (正則表達式)

傳送門

題意:

很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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章