您的位置:首页 > 其它

LeetCode-Valid Number-合法数字-状态机

2014-09-30 16:07 337 查看
https://oj.leetcode.com/problems/valid-number/

判断一个字符串是否为合法字符。

这个题目画出状态机,可以做一个二维的状态表,然后回溯。注意这个状态表中其实没有分支,所以其实不需要真的回溯在往下搜索。

int trans[10][6]={
{ 0, 1, 2, 9,-1,-1},
{-1,-1, 2, 9,-1,-1},
{ 8,-1, 2, 3, 5,-1},
{ 8,-1, 4,-1, 5,-1},    //.
{ 8,-1, 4,-1, 5,-1},                    //\d+
{-1, 6, 7,-1,-1,-1},//e
{-1,-1, 7,-1,-1,-1},//-
{ 8,-1, 7,-1,-1,-1},//\d+
{ 8,-1,-1,-1,-1,-1},//$
{-1,-1, 4,-1,-1,-1}    //.
};
class Solution {
public:
int m,n;
string s;
int GetItem(char a){
if (a==' '){return 0;}
if (a=='-' || a=='+'){return 1;}
if (a>='0' && a<='9'){return 2;}
if (a=='.'){return 3;}
if (a=='e'){return 4;}
return 5;
}
bool Solve(int p,int stat){
if (p==n){
if (stat==2 || stat==3 || stat==4|| stat==7|| stat==8){return true;}
return false;
}
int curT=GetItem(s[p]);
int ns=trans[stat][curT];
if (ns==-1){return false;}
return Solve(p+1,ns);
}

bool isNumber(const char *s) {
this->s=string(s);
n=this->s.length();
return Solve(0,0);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: