您的位置:首页 > 职场人生

剑指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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: