LeetCode8:String to Integer (atoi) 字符串轉換成整型

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