剑指offer:表示数值的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:表示数值的字符串相关的知识,希望对你有一定的参考价值。
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
class Solution:
def isNumeric(self, s):
"""
表示数值的字符串遵循模式: A[.[B]][e|EC]或者.B[e|EC]
其中A为整数部分,B为紧跟着小数点的小数部分,C为指数部分
其中A和C都可能含有符号,B不能含有符号
A不是必须的,如果没有A那么B不能为空
:param s: 待判断的字符串
:return: True / False
"""
if not s:
return False
# 查找属于A的部分,只有在遇到非数字的部分才退出循环
if s[0] in ‘+-‘:
s = s[1:]
isBreak = False
for i in range(len(s)):
if ‘0‘ <= s[i] <= ‘9‘:
continue
isBreak = True
break
if not isBreak:
return True
s = s[i:]
# 如果遇到了非数字部分,说明A部分已经查找完成。
# 查找B部分
if s and s[0] == ‘.‘:
s = s[1:]
isBreak = False
for i in range(len(s)):
if ‘0‘ <= s[i] <= ‘9‘:
continue
isBreak = True
break
if not isBreak:
return True
s = s[i:]
# 查找C部分
if s and s[0] in ‘eE‘:
s = s[1:]
# 注意C部分必须要有数字,不能只有一个e
if not s:
return False
if s[0] in ‘+-‘:
s = s[1:]
isBreak = False
for i in range(len(s)):
if ‘0‘ <= s[i] <= ‘9‘:
continue
isBreak = True
break
if not isBreak:
return True
return False
以上是关于剑指offer:表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章