65.验证数字

来源:互联网 发布:数据挖掘原理 编辑:程序博客网 时间:2024/06/04 18:46

Valid Number

问题描述:

Validate if a given string is numeric.

Some examples:
“0” => true
” 0.1 ” => true
“abc” => false
“1 a” => false
“2e10” => true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

参考答案(python):

class Solution(object):    def isNumber(self, s):        """        :type s: str        :rtype: bool        """        state = [{},               {'blank': 1, 'sign': 2, 'digit':3, '.':4},               {'digit':3, '.':4},              {'digit':3, '.':5, 'e':6, 'blank':9},              {'digit':5},              {'digit':5, 'e':6, 'blank':9},              {'sign':7, 'digit':8},              {'digit':8},              {'digit':8, 'blank':9},              {'blank':9}]        currentState = 1        for c in s:            if c >= '0' and c <= '9':                c = 'digit'            if c == ' ':                c = 'blank'            if c in ['+', '-']:                c = 'sign'            if c not in state[currentState].keys():                return False            currentState = state[currentState][c]        if currentState not in [3,5,8,9]:            return False        return True        

性能:

这里写图片描述

参考答案:

class Solution(object):    def isNumber(self, s):        """        :type s: str        :rtype: bool        """        try:            a = float(s.strip())            return True        except:            return False       

性能:

这里写图片描述

参考答案(c++):

class Solution {public:    bool isNumber(string str) {        int state=0, flag=0; // flag to judge the special case "."        while(str[0]==' ')  str.erase(0,1);//delete the  prefix whitespace         while(str[str.length()-1]==' ') str.erase(str.length()-1, 1);//delete the suffix whitespace        for(int i=0; i<str.length(); i++){            if('0'<=str[i] && str[i]<='9'){                flag=1;                if(state<=2) state=2;                else state=(state<=5)?5:7;            }            else if('+'==str[i] || '-'==str[i]){                if(state==0 || state==3) state++;                else return false;            }            else if('.'==str[i]){                if(state<=2) state=6;                else return false;            }            else if('e'==str[i]){                if(flag&&(state==2 || state==6 || state==7)) state=3;                else return false;            }            else return false;        }        return (state==2 || state==5 || (flag&&state==6) || state==7);    }};

性能:

这里写图片描述