题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
这道题如果没有题目描述中的几个例子会很难,很多情况都考虑不到,有如下情况:
(1)如果出现e或者E,不能是在末尾,也不能出现两次
(2)如果出现+-号,如果是第一次出现并且不在首位那么前面必须是e或者E;如果是第二次出现那么前面必须是e或者E
(3)如果出现小数点,不能出现过e或者E,也不能出现两次小数点
(4)上面情况都没出现的话,要判断是不是数字
# -*- coding:utf-8 -*-
class Solution:
# s字符串
def isNumeric(self, s):
if s=='':
return False
sign=False
point=False
e=False
for i in range(len(s)):
if s[i]=='e' or s[i]=='E':
if i==len(s)-1:
return False
if e:
return False
e=True
elif s[i]=='+' or s[i]=='-':
if sign and s[i-1]!='e' and s[i-1]!='E':
return False
if not sign and i>0 and s[i-1]!='e' and s[i-1]!='E':
return False
sign=True
elif s[i]=='.':
if point or e:
return False
point=True
elif not s[i].isdigit():
return False
return True