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 - 博客园