# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param str string字符串 # @return bool布尔型 # class Solution: def isNumeric(self , str:str ): # write code here if not str: return False s = str.strip() if not s: return False length = len(s) # 四种状态 is_dot = False is_num = False is_e_or_E = False # 逆向思维 满足那些状况返回False for i in range(length): # 有数字是正常的 设置为True if s[i] >= '0' and s[i] <= '9': is_num = True elif s[i] == '.': # 无重复小数点 无e # .123 可以转化为 0.123 是合法的 # "123e1.12" 是非法的 if is_dot or is_e_or_E: return False is_dot = True elif s[i] == 'e' or s[i] == 'E': # 前面没有数字 前面有e if not is_num or is_e_or_E: return False is_e_or_E = True # 重置数字 123e+ 遇到e后后面必须还要有数字 is_num = False elif s[i] == '+' or s[i] == '-': # 符号不满足 第一个 and 只出现在e的后面 返回false if i != 0 and s[i-1] !='e' and s[i-1] != 'E': return False else: # 遇到不是 数字 点 e/E +/- 直接返回False return False return is_num