锅炉信息网 > 锅炉知识 > 锅炉资讯

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

上一篇:2021年燃气灶推荐指南:燃气灶怎么选?燃气灶有哪些选购细节?燃气灶品牌价位型号综合选购推荐(7月更新)

下一篇:StableDiffusion_Asoul嘉然

锅炉资讯

锅炉资讯

锅炉学习

锅炉学习

锅炉视频

锅炉视频

锅炉百科

锅炉百科