leetcode65——Valid Number

题目大意:给出一个字符串,判断它是不是合法数字

分析:数学考察。要全面考虑清楚什么情况下才属于合法数字:

          1.数字前后都可以有空格,但中间不允许有

          2.数字前面可以出现正负号

          3.小数点'.'只能出现一次,前面可以没有数字

          4.符号'e'只能出现一次,且e后面不能出现小数点,可以出现正负号

          5.除了上面提到的字符,只允许出现'0'~'9'中的字符

代码:转载自https://www.cnblogs.com/zsychanpin/p/7094158.html

class Solution {
public:
bool isNumber(string s) {
int i = 0;
for (; i < s.size() && ' ' == s[i]; ++i);  // 跳过前导空格
if ('+' == s[i] || '-' == s[i])  // 处理正负号
++i;
bool digit = false, dot = false, exp = false;  
for (; i < s.size(); ++i) {  // 处理后面数字部分
if ('.' == s[i] && !dot)  // '.'不能出现2次,'.'前面能够没有数字
dot = true;
else if ('e' == s[i] && !exp && digit) {  // 'e'不能出现2次,'e'前面必须有数字
// 'e'后面不能出现'.','e'后面必须是整数(能够是正的或负的)
dot = exp = true;
if (i + 1 < s.size() && ('+' == s[i + 1] || '-' == s[i + 1]))
++i;
if (i + 1 >= s.size() || !(s[i + 1] >= '0' && s[i + 1] <= '9'))
return false;
}
else if (s[i] >= '0' && s[i] <= '9')
digit = true;
else break;
}
for (; i < s.size() && ' ' == s[i]; ++i);  // 跳过后面空格
return digit && i == s.size();  //有数字并且检查了i位中的./e后仍合法
}
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80226428