剑指offer--面试题54:表示数值的字符串
2016-09-28 16:25
435 查看
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。python实现:
# -*- coding:utf-8 -*-
class Solution:
# s字符串
"""
e后面一定要有数字,且一定要是整数
除了数字,e/E,小数点,+/-号,其他都是非法字符
整数:[+/-]nums
小数:[整数].[nums],小数点两边至少得有一个出现
科学记数法:整数/小数E/e整数
"""
def isNumeric(self, s):
# write code here
s = s.strip()
n = len(s)
#signValid = True#当前可以出现正负号(整数/小数/科学技术前面以及e/E后面)
type = 0#1,2,3#分别表示整数,小数,科学计数
for i in range(n):
if s[i]=="+" or s[i]=="-":
if i==0 or s[i-1]=="E" or s[i-1]=="e":
continue
else:
return False
elif "0"<=s[i]<="9":
if type==0:
type=1
continue
elif s[i]==".":
if type==1:#小数点前有整数
type=2
elif type==2 or type==3:#已经是小数或者科学计数了,不能再出现小数点
return False
else:#小数点前没有整数,那么后面必须有数字
if i<n-1 and "0"<=s[i+1]<="9":
continue
else:
return False
elif s[i]=="E" or s[i]=="e":
if i==n-1 or i==n-2 and (s[-1]=="+" or s[-1]=="-"):#E/e后面没有数字了或者只有正负号了
return False
if type==1 or type==2:
type = 3
else:#e/E前面没有数字
return False
else:#非法字符
return False
return True
相关文章推荐
- 剑指offer——面试题54:表示数值的字符串
- 剑指Offer面试题54:表示数值的字符串
- 【剑指Offer学习】【面试题54:表示数值的字符串】
- 【剑指Offer】面试题54:表示数值的字符串
- 剑指offer——面试题54:表示数值的字符串
- 剑指offer-面试题54-表示数值的字符串
- 剑指offer-面试题54:表示数值的字符串
- 剑指Offer 面试题20:表示数值的字符串 Java代码实现
- 剑指offer--面试题20:表示数值的字符串
- 【剑指offer】面试题20:表示数值的字符串
- 剑指offer54 表示数值的字符串
- 剑指offer面试题54 表示数字的字符串(java实现)
- 剑指offer(56):表示数值的字符串
- 剑指offer-----判断字符串是否表示数值(java版)
- 《剑指Offer》学习笔记--面试题54:表示数值的字符串
- 剑指offer-53.表示数值的字符串
- 剑指offer——表示数值的字符串(好题)(了解下库函数和正则)
- 剑指offer(50)-表示数值的字符串
- 【剑指offer-解题系列(53)】表示数值的字符串
- 面试题54:表示数值的字符串