您的位置:首页 > 其它

leetcode-Valid Number

2016-08-24 16:03 246 查看

Valid Number

题目:

Validate if a given string is numeric.

Some examples:

–“0” => true

–” 0.1 ” => true

–“abc” => false

–“1 a” => false

–“2e10” => true

思路:

有限状态机:清晰明了,网上资料较多,比较难以想到

if-else,比较难理清楚多种情况,思路较为直接

1) 去掉字符串前后空格

2) 再进行判断

情况分类:

合法输入:

输入限制条件
.前面可有可无(有符号或无符号)数字;前面无数字的时候,后面必须跟无符号数字;前面无数字的时候,不是合法的结束;只能出现一次
e前后必须有(有符号或无符号)数字,后面的数字必须为整数;不是合法的结束;只能出现一次
数字无,是合法结束
+、-只能出现在最开始,或者e后面;不是合法的结束

代码:

class Solution {
public:
void trim(string &s) // 去掉前后空格
{
if (s.empty())
{
return;
}
s.erase(0,s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
}

bool isNumber(string s) {
trim(s);
if (s.empty()) return false;

int i = 0;
// 判断点和e是否是第一次出现,以及判断是否出现过数字
bool isFirstP = 1, isFirste = 1, hasNum = 0;

while (i < s.length())
{
if ( (s[i] == '+' || s[i] == '-') && (i == 0 || (s[i-1] == 'e' && i != s.length() - 1)) )
{
i++;
continue;
}
if ( (s[i] >= '0' && s[i] <= '9') || (s[i] == '.' && isFirstP && isFirste && (i != s.length() - 1 || hasNum)) )
{
if (s[i] == '.') isFirstP = 0;
else
hasNum = 1;
i++;
continue;
}
else if (s[i] == 'e' && isFirste && hasNum && i != s.length() - 1)
{
isFirste = 0;
i++;
continue;
}
return false;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: