65. Valid Number
65. Valid Number難度:hardValidate if a given string can be interpreted as a decimal number.這一題非常非常無意義,不推薦做。
65. Valid Number
難度:hard
Validate if a given string can be interpreted as a decimal number.
這一題非常非常無意義,不推薦做。
實際上自帶函數float就可以做到,但是這樣就失去了意義,因此我還是嘗試自己實現了一下:
class Solution:n def isNumber(self, s: str) -> bool:n s = s.strip()n if not s: return Falsen if s[0] == '+' or s[0] == '-': s = s[1:]n try:n pointindex = s.index('.')n except:n pointindex = -1n try:n eindex = s.index('e')n except:n eindex = -1n if eindex != -1:n if eindex == len(s)-1: return Falsen epart = s[eindex+1:]n s = s[:eindex]n if epart[0] == '+' or epart[0] == '-': n epart = epart[1:]n if not epart: return Falsen for i in epart:n if not i.isdigit(): return False n if s == '.' or not s: return Falsen s = s[:pointindex] + s[pointindex+1:]n try:n s.index('.')n return Falsen except:n for j in s:n if not j.isdigit(): return Falsen return True
嘗試略加整理:
數字的結構:開頭或者e之后可能有正負號(+,-),e(如果存在)前面必須有一個可能有小數點的數字,小數點可以有一邊沒有數字,而e后面必須是一個整數,因此可以先找到小數點和e的位置,要求如果二者都存在的話小數點必須在前。
e或者字符尾前是一個數字,并且這個數字去掉小數點之后理應變成一個不空的正數,而e(如果存在)后面的數字去掉可能存在的正負號之后也必須是一個不為空的整數。
class Solution:n def isNumber(self, s: str) -> bool:n def isPositiveInteger(string):n if not string: return Falsen for i in string:n if not i.isdigit(): return Falsen return True n n s = s.strip()n if not s: return Falsen if s[0] == '+' or s[0] == '-': s = s[1:]n ans = Truen l = len(s)n try:n pointindex = s.index('.')n except:n pointindex = ln try:n eindex = s.index('e')n except:n eindex = ln n if pointindex != l and pointindex > eindex: return Falsen if pointindex == l: beforee = s[:eindex]n else: beforee = s[:pointindex]+s[pointindex+1:eindex]n if not isPositiveInteger(beforee): return Falsen if eindex != l:n epart = s[eindex+1:]n if epart:n if epart[0] == '+' or epart[0]== '-': epart = epart[1:]n return isPositiveInteger(epart)n return True
我比較喜歡submission中最快的方法:
class Solution:n def isNumber(self, s: str) -> bool:n import ren regex = r'^s*[-+]?d*(?:.d+|d.?d*)(?:e[-+]?d+)?s*$'n return bool(re.match(regex, s))
實際上這里涉及到如何寫正則表達式以及如何匹配:
Python 正則表達式 | 菜鳥教程Python正則表達式指南 - AstralWind - 博客園








