题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

Solutions

  第一种方法就是采用 Python 里面自带的转成浮点型数值的强制转换,如果出错就返回 0,这种是实践时可以利用的方式。

# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        try:
            return float(s)
        except:
            return 0
# 运行时间:33ms
# 占用内存:5728k

  第二种解法:考虑是否有 $e$ 存在,如果有,$e$ 后面必须有数字,且必须是整数(正整数、0 或负整数),如果没有 $e$ 存在,则判断它是不是普通的数字。

# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        if not s or len(s)<=0:
            return False
        alist=[i.lower() for i in s]
        if 'e' in alist:
            index=alist.index('e')
            front=alist[:index]
            behind=alist[index+1:]
            if '.' in behind or len(behind)==0:
                return False
            isfront=self.isDigit(front)
            isbehind=self.isDigit(behind)
            return isfront and isbehind
        else:
            return self.isDigit(alist)
        
    def isDigit(self,alist):
        dotNum=0
        allow_num = ['0', '1', '2', '3', '4', '5',
                     '6', '7', '8', '9', '+', '-', '.']
        for i in range(len(alist)):
            if alist[i] not in allow_num:
                return False
            if alist[i]=='.':
                dotNum += 1
            if alist[i] in '+-' and i!=0:
                return False
        if dotNum>1:
            return False
        return True
# 运行时间:33ms
# 占用内存:5728k

References

  1. 054. 表示数值的字符串
  2. 题目:表示数值的字符串