您的位置:首页 > 其它

leetcode 65: Valid Number

2015-08-03 13:08 363 查看
Use the FSM method:

There are 6 different types of input: space, sign, digit, dot, expo, invalid.

And the states are 1 sign, 2 digit, 3 dot, 4 digit+space, 5 digit+dot (dot+digit, digit+dot+digit), 6 digit+expo, 7 digit+expo+digit, 8 digit+expo+sign.

Only states 2, 4, 5, 7 are valid states to be finished.

class Solution {
public:
bool isNumber(string s) {
enum input
{
space,
sign,
digit,
dot,
expo,
invalid
};
int table[9][6]=
{
0,1,2,3,-1,-1,
-1,-1,2,3,-1,-1,
4,-1,2,5,6,-1,
-1,-1,5,-1,-1,-1,
4,-1,-1,-1,-1,-1,
4,-1,5,-1,6,-1,
-1,8,7,-1,-1,-1,
4,-1,7,-1,-1,-1,
-1,-1,7,-1,-1,-1,
};
int i=0,state=0;
while(i!=s.size())
{
input in=invalid;
if(s[i]==' ')
in=space;
else if(s[i]=='+'||s[i]=='-')
in=sign;
else if(s[i]>='0'&&s[i]<='9')
in=digit;
else if(s[i]=='.')
in=dot;
else if(s[i]=='e')
in=expo;
state=table[state][in];
if(state==-1)
return false;
i++;
}
return state==2||state==4||state==5||state==7;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: