导航网站制作,WordPress重新安装删除哪个,云南最新消息,织梦做仿站时 为何会发生本地地址跳转网站地址文章目录 题目描述题目分析法一#xff1a;完整代码: 法二#xff1a;完整代码: 题目描述 请实现一个函数用来判断字符串是否表示数值#xff08;包括整数和小数#xff09;。 数值#xff08;按顺序#xff09;可以分成以下几个部分#xff1a; 若干空格 一个 小数 或者… 文章目录 题目描述题目分析法一完整代码: 法二完整代码: 题目描述 请实现一个函数用来判断字符串是否表示数值包括整数和小数。 数值按顺序可以分成以下几个部分 若干空格 一个 小数 或者 整数 可选一个 ‘e’ 或 ‘E’ 后面跟着一个 整数 若干空格 小数按顺序可以分成以下几个部分 可选一个符号字符‘’ 或 ‘-’ 下述格式之一 至少一位数字后面跟着一个点 ‘.’ 至少一位数字后面跟着一个点 ‘.’ 后面再跟着至少一位数字 一个点 ‘.’ 后面跟着至少一位数字 整数按顺序可以分成以下几个部分 可选一个符号字符‘’ 或 ‘-’ 至少一位数字 部分数值列举如下 [“100”, “5e2”, “-123”, “3.1416”, “-1E-16”, “0123”] 部分非数值列举如下 [“12e”, “1a3.14”, “1.2.3”, “±5”, “12e5.4”] 示例 1 输入s “0” 输出true 示例 2 输入s “e” 输出false 题目分析
这道题其实刚上来的第一思路就是把所有的情况全部分析出来然后分别处理。 不过这样做并不是很好除非你能N刷这道题不然考试或者面试的时候很容易漏情况导致调试半天心态崩掉。 包括用状态机做这个题状态机做这个题要分出来八九种情况还要找状态转移关系也是很多很杂。
所以这道题最好用的方法就是异常判断面试考试最好用的方法就是正则。
法一
先来一个简单的方法 其实题目要求就是判断科学计数法是否符合规范使用python的float转换如果能转换成功则是合规的。 所以直接用tyr异常判断就行了。
完整代码:
class Solution:def isNumber(self, s: str) - bool:try:float(s)except:return Falsereturn True法二
面试考试遇到这道题就直接正则吧。
先分析一下整体合规的式子可有可无的正负号 小数或整数 可有可无的e 可有可无的正负号 整数
先放代码 然后分析。
re.match(r^[-]?(\d\.?\d*|\.\d)([Ee][-]?\d)?$开头的^和结尾的$ 表示从开头匹配到结尾要完整匹配整个输入字符串。[-]? :表示匹配或者-符号 0次或者1次。 表示匹配前面的字符0次或1次。(\d\.?\d*|\.\d): 这一串表示匹配小数或者整数| 字符表示或将这一串分割成了两个部分. 第一部分\d\.?\d* \d 匹配1个或者多个数字表示匹配前方字符一次或多次。\.? 表示匹配 . 0次或1次\d* 表示匹配数字0次或多次。 整个第一部分中有一个\.? 表示小数点可有可无也就是这一部分可以为小数可以为整数。若为小数则其前必有数字后可有可无。第二部分\.\d,就是匹配了 小数点前无数后面有数的情况。
- ([Ee][-]?\d)? :这一串主要是控制e以及后面的字符 首先这一段是可有可无的因为e本身就可有可无嘛所以最后有一个?表示前一段出现0次或1次。[Ee]表示选择大写E或者小写e。e后面必有数字嘛要么是正负号要么就是数字。所以再加上[-]? 表示匹配或者-符号 0次或者1次。\d匹配数字一次或多次。
完整代码:
class Solution:def isNumber(self, s: str) - bool:import rereturn bool(re.match(r^[-]?(\d\.?\d*|\.\d)([Ee][-]?\d)?$,s.strip()))