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

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

精选推荐

  • 如何正确选择白板供应商
    如何正确选择白板供应商

    目前在无锡想采购一块白板不管是实体店铺,还是网络平台都有很多选择,想要到专业的无锡白板公司采购还需要掌握一定的方式技巧。现

  • 柴油发电机组供应商
    柴油发电机组供应商

      t 扬州华东动力机械有限公司,位于江苏省扬州市江都区仙城工业园,是专业从事发电机、柴油及燃气发电机组研发、制造、销售、服务于

  • 高温辐射炉
    高温辐射炉

    5.2.2高温辐射炉5.2.2.1温度控制★(1)样品温度范围:常温~1400℃。★(2)均温区:长度不小于80mm。★(3)中心区:长度不小于10mm。(4)温度梯度(均

  • 高压锅在什么情况下会爆炸?
    高压锅在什么情况下会爆炸?

    近日,多地发生高压锅爆炸事故,给不少家庭带来了伤害和财产损失。那么,什么情况下会导致高压锅爆炸呢?首先,当高压锅内部压力过高时,如果

0