您的位置:首页 > 其它

leetcode_065 Valid Number

2016-03-22 21:12 302 查看
题目分析:判断一个数是否是合法数。

解题分析:通过绘制有限状态自动机来实现。
各个状态具体如下:
                   1)初始状态,无输入或者只有space的状态;
                   2)输入了数字之后的状态;
                   3)输入数字,然后输入小数点的状态;

                   4)输入数字,输入e的状态;
                   5)终止状态;
                   6)前面无数字,只输入小数点的状态;
                   7)输入小数点后输入数字的状态;
                   8)输入e之后输入符号的状态;
                   9)输入e之后输入数字的状态。
class Solution
{
public:
bool isNumber(string s)
{
int start = 0;
int end = s.length() - 1;
while (start <= end)
{
if (s[start] != ' ' && s[end] != ' ')
{
break;
}
if (s[start] == ' ')
{
start++;
}
if (s[end] == ' ')
{
end--;
}
}
if (start <= end)
{
s = s.substr(start, end + 1 - start);
}
else
{
return false;
}
int status = 1;
for (int i = 0; i < s.length(); i++)
{
char ch = s[i];
//处理状态1情况(初始状态)
if (status == 1)
{
if (ch >= '0' && ch <= '9')
{
status = 2;
}
else if (ch == '.')
{
status = 6;
}
else if (ch == '+' || ch == '-')
{
status = 1;
}
else
{
cout << "hehe" << endl;
status = 5;
}
}
//处理状态2情况(输入了数字之后的状态)
else if (status == 2)
{
if (ch >= '0' && ch <= '9')
{
status = 2;
}
else if (ch == '.')
{
status = 3;
}
else if (ch == 'e' || ch == 'E')
{
status = 4;
}
else
{
status = 5;
}
}
//处理状态3情况(输入数字,然后输入小数点状态)
else if (status == 3)
{
if (ch >= '0' && ch <= '9')
{
status = 3;
}
else if (ch == 'e' || ch == 'E')
{
status = 4;
}
else
{
status = 5;
}
}
//处理状态4情况(输入数字,输入e状态)
else if (status == 4)
{
if (ch >= '0' && ch <= '9')
{
status = 9;
}
else if (ch == '+' || ch == '-')
{
status = 8;
}
else
{
status = 5;
}
}
//处理状态5情况(终止状态)
else if (status == 5)
{
cout << "lala" << endl;
break;
}
//处理状态6情况(前面无数字,只输入了小数点的状态)
else if (status == 6)
{
if (ch >= '0' && ch <= '9')
{
status = 7;
}
else
{
status = 5;
}
}
//处理状态7情况(输入小数点后输入数字状态)
else if (status == 7)
{
if (ch >= '0' && ch <= '9')
{
status = 7;
}
else if (ch == 'e' || ch == 'E')
{
status = 4;
}
else
{
status = 5;
}
}
//处理状态8情况(输入e之后输入符号的状态 )
else if (status == 8)
{
if (ch >= '0' && ch <= '9')
{
status = 9;
}
else
{
status = 5;
}
}
//处理状态9情况(输入e后输入数字的状态)
else if (status == 9)
{
if (ch >= '0' && ch <= '9')
{
status = 9;
}
else
{
status = 5;
}
}
}
if (status == 5 || status == 1 || status == 6 || status == 4 || status == 8)
{
return false;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: