题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解题思路
方法一:逐字符匹配
1、思路:见题解。
2、代码:
class Solution {
public:
bool isNumber(string s) {
bool hase = false, hasdot = false, hassign = false, hasnum = false;
int i = 0, len = s.size();
while (i < len && s[i] == ' ') i++;
if (i == len) return false;
while (i < len) {
while (i < len && s[i] >= '0' && s[i] <= '9') {
i++;
hasnum = true;
}
if (i == len) return true;
if (s[i] == 'e' || s[i] == 'E') {
if (hase || !hasnum) {
return false;
}
hase = true;
hassign = false;
hasnum = false;
hasdot = false;
} else if (s[i] == '+' || s[i] == '-') {
if (hassign || hasnum || hasdot) {
return false;
}
hassign = true;
} else if (s[i] == '.') {
if (hase || hasdot) {
return false;
}
hasdot = true;
} else if (s[i] == ' ') {
break;
} else {
return false;
}
i++;
}
while (i < len && s[i] == ' ') i++;
return (hasnum && i == len) ? true : false;
}
};
3、复杂度:
时间复杂度:O(n);
空间复杂度:O(1)。