class Solution {
public:
bool isNumber(const char *s) {
// Note: The Solution object is instantiated only once and is reused by each test case.
//有限自动机,和处理图书章节前的“第1.1章”的方法类似
enum InputType
{
INVALID,//INVALID代表0
SPACE,//SPACE代表1
SIGN,//SIGN代表2
DIGIT,//DIGIT代表3
DOT,//DOT代表4
EXPONENT,//EXPONENT代表5
NUM_INPUTS//NUM_INPUTS代表6
};
int transTable[][NUM_INPUTS]={
-1, 0, 3, 1, 2,-1,//next states for state 0
-1, 8,-1, 1, 4, 5,//next states for state 1
-1,-1,-1, 4,-1,-1,//next states for state 2
-1,-1,-1, 1, 2,-1,//next states for state 3
-1, 8,-1, 4,-1, 5,//next states for state 4
-1,-1, 6, 7,-1,-1,//next states for state 5
-1,-1,-1, 7,-1,-1,//next states for state 6
-1, 8,-1, 7,-1,-1,//next states for state 7
-1, 8,-1,-1,-1,-1 //next states for state 8
};
int state = 0;
while(*s!='\0')
{
InputType inpTyp= INVALID;
if(isspace(*s))
inpTyp=SPACE;
else if(*s=='+'||*s=='-')
inpTyp=SIGN;
else if(isdigit(*s))
inpTyp=DIGIT;
else if(*s=='.')
inpTyp=DOT;
else if(*s=='e'||*s=='E')
inpTyp=EXPONENT;
state=transTable[state][inpTyp];
if(state==-1)
return false;
else s++;
}
return state==1||state==4||state==7||state==8;
}
};
【leetcode】Valid Number
最新推荐文章于 2019-04-07 16:41:47 发布